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