11373b98135b2854578111dd535e24d39c8853f14Michael Kolb/* 21373b98135b2854578111dd535e24d39c8853f14Michael Kolb * Copyright (C) 2012 The Android Open Source Project 31373b98135b2854578111dd535e24d39c8853f14Michael Kolb * 41373b98135b2854578111dd535e24d39c8853f14Michael Kolb * Licensed under the Apache License, Version 2.0 (the "License"); you may not 51373b98135b2854578111dd535e24d39c8853f14Michael Kolb * use this file except in compliance with the License. You may obtain a copy of 61373b98135b2854578111dd535e24d39c8853f14Michael Kolb * the License at 71373b98135b2854578111dd535e24d39c8853f14Michael Kolb * 81373b98135b2854578111dd535e24d39c8853f14Michael Kolb * http://www.apache.org/licenses/LICENSE-2.0 91373b98135b2854578111dd535e24d39c8853f14Michael Kolb * 101373b98135b2854578111dd535e24d39c8853f14Michael Kolb * Unless required by applicable law or agreed to in writing, software 111373b98135b2854578111dd535e24d39c8853f14Michael Kolb * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 121373b98135b2854578111dd535e24d39c8853f14Michael Kolb * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 131373b98135b2854578111dd535e24d39c8853f14Michael Kolb * License for the specific language governing permissions and limitations under 141373b98135b2854578111dd535e24d39c8853f14Michael Kolb * the License. 151373b98135b2854578111dd535e24d39c8853f14Michael Kolb */ 161373b98135b2854578111dd535e24d39c8853f14Michael Kolb 171373b98135b2854578111dd535e24d39c8853f14Michael Kolbpackage com.android.camera.ui; 181373b98135b2854578111dd535e24d39c8853f14Michael Kolb 193ed120d2204c73ab20d6093f112367de60129eb3John Reckimport android.content.Context; 203ed120d2204c73ab20d6093f112367de60129eb3John Reckimport android.graphics.Canvas; 211373b98135b2854578111dd535e24d39c8853f14Michael Kolbimport android.graphics.Path; 223ed120d2204c73ab20d6093f112367de60129eb3John Reckimport android.graphics.drawable.BitmapDrawable; 233ed120d2204c73ab20d6093f112367de60129eb3John Reckimport android.graphics.drawable.Drawable; 241373b98135b2854578111dd535e24d39c8853f14Michael Kolb 251373b98135b2854578111dd535e24d39c8853f14Michael Kolbimport java.util.ArrayList; 261373b98135b2854578111dd535e24d39c8853f14Michael Kolbimport java.util.List; 271373b98135b2854578111dd535e24d39c8853f14Michael Kolb 281373b98135b2854578111dd535e24d39c8853f14Michael Kolb/** 291373b98135b2854578111dd535e24d39c8853f14Michael Kolb * Pie menu item 301373b98135b2854578111dd535e24d39c8853f14Michael Kolb */ 311373b98135b2854578111dd535e24d39c8853f14Michael Kolbpublic class PieItem { 321373b98135b2854578111dd535e24d39c8853f14Michael Kolb 333ed120d2204c73ab20d6093f112367de60129eb3John Reck public static interface OnClickListener { 343ed120d2204c73ab20d6093f112367de60129eb3John Reck void onClick(PieItem item); 353ed120d2204c73ab20d6093f112367de60129eb3John Reck } 363ed120d2204c73ab20d6093f112367de60129eb3John Reck 373ed120d2204c73ab20d6093f112367de60129eb3John Reck private Drawable mDrawable; 381373b98135b2854578111dd535e24d39c8853f14Michael Kolb private int level; 39b5b59b88683823d70faac7b3454519d53c51180bMichael Kolb private float mCenter; 401373b98135b2854578111dd535e24d39c8853f14Michael Kolb private float start; 411373b98135b2854578111dd535e24d39c8853f14Michael Kolb private float sweep; 421373b98135b2854578111dd535e24d39c8853f14Michael Kolb private float animate; 431373b98135b2854578111dd535e24d39c8853f14Michael Kolb private int inner; 441373b98135b2854578111dd535e24d39c8853f14Michael Kolb private int outer; 451373b98135b2854578111dd535e24d39c8853f14Michael Kolb private boolean mSelected; 461373b98135b2854578111dd535e24d39c8853f14Michael Kolb private boolean mEnabled; 471373b98135b2854578111dd535e24d39c8853f14Michael Kolb private List<PieItem> mItems; 481373b98135b2854578111dd535e24d39c8853f14Michael Kolb private Path mPath; 493ed120d2204c73ab20d6093f112367de60129eb3John Reck private OnClickListener mOnClickListener; 503ed120d2204c73ab20d6093f112367de60129eb3John Reck private float mAlpha; 511373b98135b2854578111dd535e24d39c8853f14Michael Kolb 523cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu // Gray out the view when disabled 533cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu private static final float ENABLED_ALPHA = 1; 543cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu private static final float DISABLED_ALPHA = (float) 0.3; 553cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu private boolean mChangeAlphaWhenDisabled = true; 563cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu 573ed120d2204c73ab20d6093f112367de60129eb3John Reck public PieItem(Drawable drawable, int level) { 583ed120d2204c73ab20d6093f112367de60129eb3John Reck mDrawable = drawable; 591373b98135b2854578111dd535e24d39c8853f14Michael Kolb this.level = level; 603ed120d2204c73ab20d6093f112367de60129eb3John Reck setAlpha(1f); 611373b98135b2854578111dd535e24d39c8853f14Michael Kolb mEnabled = true; 621373b98135b2854578111dd535e24d39c8853f14Michael Kolb setAnimationAngle(getAnimationAngle()); 63b5b59b88683823d70faac7b3454519d53c51180bMichael Kolb start = -1; 64b5b59b88683823d70faac7b3454519d53c51180bMichael Kolb mCenter = -1; 651373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 661373b98135b2854578111dd535e24d39c8853f14Michael Kolb 671373b98135b2854578111dd535e24d39c8853f14Michael Kolb public boolean hasItems() { 681373b98135b2854578111dd535e24d39c8853f14Michael Kolb return mItems != null; 691373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 701373b98135b2854578111dd535e24d39c8853f14Michael Kolb 711373b98135b2854578111dd535e24d39c8853f14Michael Kolb public List<PieItem> getItems() { 721373b98135b2854578111dd535e24d39c8853f14Michael Kolb return mItems; 731373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 741373b98135b2854578111dd535e24d39c8853f14Michael Kolb 751373b98135b2854578111dd535e24d39c8853f14Michael Kolb public void addItem(PieItem item) { 761373b98135b2854578111dd535e24d39c8853f14Michael Kolb if (mItems == null) { 771373b98135b2854578111dd535e24d39c8853f14Michael Kolb mItems = new ArrayList<PieItem>(); 781373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 791373b98135b2854578111dd535e24d39c8853f14Michael Kolb mItems.add(item); 801373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 811373b98135b2854578111dd535e24d39c8853f14Michael Kolb 821373b98135b2854578111dd535e24d39c8853f14Michael Kolb public void setPath(Path p) { 831373b98135b2854578111dd535e24d39c8853f14Michael Kolb mPath = p; 841373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 851373b98135b2854578111dd535e24d39c8853f14Michael Kolb 861373b98135b2854578111dd535e24d39c8853f14Michael Kolb public Path getPath() { 871373b98135b2854578111dd535e24d39c8853f14Michael Kolb return mPath; 881373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 891373b98135b2854578111dd535e24d39c8853f14Michael Kolb 903cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu public void setChangeAlphaWhenDisabled (boolean enable) { 913cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu mChangeAlphaWhenDisabled = enable; 923cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu } 933cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu 941373b98135b2854578111dd535e24d39c8853f14Michael Kolb public void setAlpha(float alpha) { 953ed120d2204c73ab20d6093f112367de60129eb3John Reck mAlpha = alpha; 963ed120d2204c73ab20d6093f112367de60129eb3John Reck mDrawable.setAlpha((int) (255 * alpha)); 971373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 981373b98135b2854578111dd535e24d39c8853f14Michael Kolb 991373b98135b2854578111dd535e24d39c8853f14Michael Kolb public void setAnimationAngle(float a) { 1001373b98135b2854578111dd535e24d39c8853f14Michael Kolb animate = a; 1011373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 1021373b98135b2854578111dd535e24d39c8853f14Michael Kolb 1031373b98135b2854578111dd535e24d39c8853f14Michael Kolb public float getAnimationAngle() { 1041373b98135b2854578111dd535e24d39c8853f14Michael Kolb return animate; 1051373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 1061373b98135b2854578111dd535e24d39c8853f14Michael Kolb 1071373b98135b2854578111dd535e24d39c8853f14Michael Kolb public void setEnabled(boolean enabled) { 1081373b98135b2854578111dd535e24d39c8853f14Michael Kolb mEnabled = enabled; 1093cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu if (mChangeAlphaWhenDisabled) { 1103cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu if (mEnabled) { 1113cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu setAlpha(ENABLED_ALPHA); 1123cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu } else { 1133cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu setAlpha(DISABLED_ALPHA); 1143cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu } 1153cccc4e63eb678944c3d7fe1238fb4a051e51035Doris Liu } 1161373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 1171373b98135b2854578111dd535e24d39c8853f14Michael Kolb 1181373b98135b2854578111dd535e24d39c8853f14Michael Kolb public boolean isEnabled() { 1191373b98135b2854578111dd535e24d39c8853f14Michael Kolb return mEnabled; 1201373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 1211373b98135b2854578111dd535e24d39c8853f14Michael Kolb 1221373b98135b2854578111dd535e24d39c8853f14Michael Kolb public void setSelected(boolean s) { 1231373b98135b2854578111dd535e24d39c8853f14Michael Kolb mSelected = s; 1241373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 1251373b98135b2854578111dd535e24d39c8853f14Michael Kolb 1261373b98135b2854578111dd535e24d39c8853f14Michael Kolb public boolean isSelected() { 1271373b98135b2854578111dd535e24d39c8853f14Michael Kolb return mSelected; 1281373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 1291373b98135b2854578111dd535e24d39c8853f14Michael Kolb 1301373b98135b2854578111dd535e24d39c8853f14Michael Kolb public int getLevel() { 1311373b98135b2854578111dd535e24d39c8853f14Michael Kolb return level; 1321373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 1331373b98135b2854578111dd535e24d39c8853f14Michael Kolb 1341373b98135b2854578111dd535e24d39c8853f14Michael Kolb public void setGeometry(float st, float sw, int inside, int outside) { 1351373b98135b2854578111dd535e24d39c8853f14Michael Kolb start = st; 1361373b98135b2854578111dd535e24d39c8853f14Michael Kolb sweep = sw; 1371373b98135b2854578111dd535e24d39c8853f14Michael Kolb inner = inside; 1381373b98135b2854578111dd535e24d39c8853f14Michael Kolb outer = outside; 1391373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 1401373b98135b2854578111dd535e24d39c8853f14Michael Kolb 141b5b59b88683823d70faac7b3454519d53c51180bMichael Kolb public void setFixedSlice(float center, float sweep) { 142b5b59b88683823d70faac7b3454519d53c51180bMichael Kolb mCenter = center; 143b5b59b88683823d70faac7b3454519d53c51180bMichael Kolb this.sweep = sweep; 144b5b59b88683823d70faac7b3454519d53c51180bMichael Kolb } 145b5b59b88683823d70faac7b3454519d53c51180bMichael Kolb 146b5b59b88683823d70faac7b3454519d53c51180bMichael Kolb public float getCenter() { 147b5b59b88683823d70faac7b3454519d53c51180bMichael Kolb return mCenter; 148b5b59b88683823d70faac7b3454519d53c51180bMichael Kolb } 149b5b59b88683823d70faac7b3454519d53c51180bMichael Kolb 1501373b98135b2854578111dd535e24d39c8853f14Michael Kolb public float getStart() { 1511373b98135b2854578111dd535e24d39c8853f14Michael Kolb return start; 1521373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 1531373b98135b2854578111dd535e24d39c8853f14Michael Kolb 1541373b98135b2854578111dd535e24d39c8853f14Michael Kolb public float getStartAngle() { 1551373b98135b2854578111dd535e24d39c8853f14Michael Kolb return start + animate; 1561373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 1571373b98135b2854578111dd535e24d39c8853f14Michael Kolb 1581373b98135b2854578111dd535e24d39c8853f14Michael Kolb public float getSweep() { 1591373b98135b2854578111dd535e24d39c8853f14Michael Kolb return sweep; 1601373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 1611373b98135b2854578111dd535e24d39c8853f14Michael Kolb 1621373b98135b2854578111dd535e24d39c8853f14Michael Kolb public int getInnerRadius() { 1631373b98135b2854578111dd535e24d39c8853f14Michael Kolb return inner; 1641373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 1651373b98135b2854578111dd535e24d39c8853f14Michael Kolb 1661373b98135b2854578111dd535e24d39c8853f14Michael Kolb public int getOuterRadius() { 1671373b98135b2854578111dd535e24d39c8853f14Michael Kolb return outer; 1681373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 1691373b98135b2854578111dd535e24d39c8853f14Michael Kolb 1703ed120d2204c73ab20d6093f112367de60129eb3John Reck public void setOnClickListener(OnClickListener listener) { 1713ed120d2204c73ab20d6093f112367de60129eb3John Reck mOnClickListener = listener; 1723ed120d2204c73ab20d6093f112367de60129eb3John Reck } 1733ed120d2204c73ab20d6093f112367de60129eb3John Reck 1743ed120d2204c73ab20d6093f112367de60129eb3John Reck public void performClick() { 1753ed120d2204c73ab20d6093f112367de60129eb3John Reck if (mOnClickListener != null) { 1763ed120d2204c73ab20d6093f112367de60129eb3John Reck mOnClickListener.onClick(this); 1773ed120d2204c73ab20d6093f112367de60129eb3John Reck } 1783ed120d2204c73ab20d6093f112367de60129eb3John Reck } 1793ed120d2204c73ab20d6093f112367de60129eb3John Reck 1803ed120d2204c73ab20d6093f112367de60129eb3John Reck public int getIntrinsicWidth() { 1813ed120d2204c73ab20d6093f112367de60129eb3John Reck return mDrawable.getIntrinsicWidth(); 1823ed120d2204c73ab20d6093f112367de60129eb3John Reck } 1833ed120d2204c73ab20d6093f112367de60129eb3John Reck 1843ed120d2204c73ab20d6093f112367de60129eb3John Reck public int getIntrinsicHeight() { 1853ed120d2204c73ab20d6093f112367de60129eb3John Reck return mDrawable.getIntrinsicHeight(); 1863ed120d2204c73ab20d6093f112367de60129eb3John Reck } 1873ed120d2204c73ab20d6093f112367de60129eb3John Reck 1883ed120d2204c73ab20d6093f112367de60129eb3John Reck public void setBounds(int left, int top, int right, int bottom) { 1893ed120d2204c73ab20d6093f112367de60129eb3John Reck mDrawable.setBounds(left, top, right, bottom); 1903ed120d2204c73ab20d6093f112367de60129eb3John Reck } 1913ed120d2204c73ab20d6093f112367de60129eb3John Reck 1923ed120d2204c73ab20d6093f112367de60129eb3John Reck public void draw(Canvas canvas) { 1933ed120d2204c73ab20d6093f112367de60129eb3John Reck mDrawable.draw(canvas); 1943ed120d2204c73ab20d6093f112367de60129eb3John Reck } 1953ed120d2204c73ab20d6093f112367de60129eb3John Reck 1963ed120d2204c73ab20d6093f112367de60129eb3John Reck public void setImageResource(Context context, int resId) { 1973ed120d2204c73ab20d6093f112367de60129eb3John Reck Drawable d = context.getResources().getDrawable(resId).mutate(); 1983ed120d2204c73ab20d6093f112367de60129eb3John Reck d.setBounds(mDrawable.getBounds()); 1993ed120d2204c73ab20d6093f112367de60129eb3John Reck mDrawable = d; 2003ed120d2204c73ab20d6093f112367de60129eb3John Reck setAlpha(mAlpha); 2011373b98135b2854578111dd535e24d39c8853f14Michael Kolb } 2021373b98135b2854578111dd535e24d39c8853f14Michael Kolb 2031373b98135b2854578111dd535e24d39c8853f14Michael Kolb} 204