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