18872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb/* 28872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * Copyright (C) 2012 The Android Open Source Project 38872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * 48872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * Licensed under the Apache License, Version 2.0 (the "License"); you may not 58872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * use this file except in compliance with the License. You may obtain a copy of 68872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * the License at 78872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * 88872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * http://www.apache.org/licenses/LICENSE-2.0 98872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * 108872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * Unless required by applicable law or agreed to in writing, software 118872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 128872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 138872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * License for the specific language governing permissions and limitations under 148872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * the License. 158872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb */ 168872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 178872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbpackage com.android.camera.ui; 188872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 198872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport android.content.Context; 208872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport android.graphics.Canvas; 218872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport android.graphics.Path; 228872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport android.graphics.drawable.Drawable; 238872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 248872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport java.util.ArrayList; 258872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport java.util.List; 268872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 278872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb/** 288872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * Pie menu item 298872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb */ 308872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbpublic class PieItem { 318872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 328872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public static interface OnClickListener { 338872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb void onClick(PieItem item); 348872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 358872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 368872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private Drawable mDrawable; 378872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private int level; 383daa3518c3bfa1a2c1da37c56e1a34e9a0cac259Michael Kolb 398872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private boolean mSelected; 408872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private boolean mEnabled; 418872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private List<PieItem> mItems; 428872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private Path mPath; 438872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private OnClickListener mOnClickListener; 448872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private float mAlpha; 4510f4ba0198904a3d7679771ce845c847d940226fMichael Kolb private CharSequence mLabel; 468872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 478872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb // Gray out the view when disabled 488872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private static final float ENABLED_ALPHA = 1; 498872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private static final float DISABLED_ALPHA = (float) 0.3; 508872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private boolean mChangeAlphaWhenDisabled = true; 518872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 528872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public PieItem(Drawable drawable, int level) { 538872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mDrawable = drawable; 548872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb this.level = level; 553bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb if (drawable != null) { 563bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb setAlpha(1f); 573bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb } 588872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mEnabled = true; 593daa3518c3bfa1a2c1da37c56e1a34e9a0cac259Michael Kolb } 603daa3518c3bfa1a2c1da37c56e1a34e9a0cac259Michael Kolb 6110f4ba0198904a3d7679771ce845c847d940226fMichael Kolb public void setLabel(CharSequence txt) { 6210f4ba0198904a3d7679771ce845c847d940226fMichael Kolb mLabel = txt; 6310f4ba0198904a3d7679771ce845c847d940226fMichael Kolb } 6410f4ba0198904a3d7679771ce845c847d940226fMichael Kolb 6510f4ba0198904a3d7679771ce845c847d940226fMichael Kolb public CharSequence getLabel() { 6610f4ba0198904a3d7679771ce845c847d940226fMichael Kolb return mLabel; 6710f4ba0198904a3d7679771ce845c847d940226fMichael Kolb } 6810f4ba0198904a3d7679771ce845c847d940226fMichael Kolb 698872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public boolean hasItems() { 708872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb return mItems != null; 718872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 728872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 738872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public List<PieItem> getItems() { 748872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb return mItems; 758872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 768872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 778872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void addItem(PieItem item) { 788872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb if (mItems == null) { 798872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mItems = new ArrayList<PieItem>(); 808872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 818872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mItems.add(item); 828872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 838872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 843bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb public void clearItems() { 853bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb mItems = null; 863bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb } 873bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb 883daa3518c3bfa1a2c1da37c56e1a34e9a0cac259Michael Kolb public void setLevel(int level) { 893daa3518c3bfa1a2c1da37c56e1a34e9a0cac259Michael Kolb this.level = level; 903daa3518c3bfa1a2c1da37c56e1a34e9a0cac259Michael Kolb } 913daa3518c3bfa1a2c1da37c56e1a34e9a0cac259Michael Kolb 928872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void setPath(Path p) { 938872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mPath = p; 948872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 958872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 968872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public Path getPath() { 978872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb return mPath; 988872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 998872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1008872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void setChangeAlphaWhenDisabled (boolean enable) { 1018872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mChangeAlphaWhenDisabled = enable; 1028872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1038872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1048872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void setAlpha(float alpha) { 1058872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mAlpha = alpha; 1068872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mDrawable.setAlpha((int) (255 * alpha)); 1078872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1088872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1098872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void setEnabled(boolean enabled) { 1108872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mEnabled = enabled; 1118872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb if (mChangeAlphaWhenDisabled) { 1128872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb if (mEnabled) { 1138872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb setAlpha(ENABLED_ALPHA); 1148872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } else { 1158872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb setAlpha(DISABLED_ALPHA); 1168872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1178872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1188872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1198872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1208872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public boolean isEnabled() { 1218872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb return mEnabled; 1228872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1238872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1248872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void setSelected(boolean s) { 1258872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mSelected = s; 1268872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1278872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1288872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public boolean isSelected() { 1298872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb return mSelected; 1308872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1318872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1328872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public int getLevel() { 1338872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb return level; 1348872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1358872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1368872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1378872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void setOnClickListener(OnClickListener listener) { 1388872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mOnClickListener = listener; 1398872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1408872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1418872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void performClick() { 1428872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb if (mOnClickListener != null) { 1438872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mOnClickListener.onClick(this); 1448872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1458872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1468872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1478872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public int getIntrinsicWidth() { 1488872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb return mDrawable.getIntrinsicWidth(); 1498872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1508872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1518872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public int getIntrinsicHeight() { 1528872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb return mDrawable.getIntrinsicHeight(); 1538872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1548872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1558872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void setBounds(int left, int top, int right, int bottom) { 1568872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mDrawable.setBounds(left, top, right, bottom); 1578872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1588872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1598872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void draw(Canvas canvas) { 1608872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mDrawable.draw(canvas); 1618872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1628872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1638872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void setImageResource(Context context, int resId) { 1648872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb Drawable d = context.getResources().getDrawable(resId).mutate(); 1658872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb d.setBounds(mDrawable.getBounds()); 1668872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mDrawable = d; 1678872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb setAlpha(mAlpha); 1688872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1698872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 1708872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb} 171