1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/* 2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2015 The Android Open Source Project 3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License"); 5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License. 6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at 7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * http://www.apache.org/licenses/LICENSE-2.0 9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software 11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS, 12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and 14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License. 15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.ui.mediapicker.camerafocus; 18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.Context; 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.graphics.Canvas; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.graphics.Path; 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.graphics.drawable.Drawable; 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.ArrayList; 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.List; 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/** 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Pie menu item 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic class PieItem { 31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static interface OnClickListener { 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd void onClick(PieItem item); 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private Drawable mDrawable; 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private int level; 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private float mCenter; 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private float start; 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private float sweep; 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private float animate; 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private int inner; 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private int outer; 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private boolean mSelected; 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private boolean mEnabled; 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private List<PieItem> mItems; 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private Path mPath; 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private OnClickListener mOnClickListener; 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private float mAlpha; 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Gray out the view when disabled 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final float ENABLED_ALPHA = 1; 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final float DISABLED_ALPHA = (float) 0.3; 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private boolean mChangeAlphaWhenDisabled = true; 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public PieItem(Drawable drawable, int level) { 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDrawable = drawable; 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd this.level = level; 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd setAlpha(1f); 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mEnabled = true; 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd setAnimationAngle(getAnimationAngle()); 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd start = -1; 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mCenter = -1; 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean hasItems() { 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mItems != null; 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public List<PieItem> getItems() { 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mItems; 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void addItem(PieItem item) { 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (mItems == null) { 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mItems = new ArrayList<PieItem>(); 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mItems.add(item); 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setPath(Path p) { 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mPath = p; 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public Path getPath() { 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mPath; 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setChangeAlphaWhenDisabled (boolean enable) { 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mChangeAlphaWhenDisabled = enable; 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setAlpha(float alpha) { 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mAlpha = alpha; 95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDrawable.setAlpha((int) (255 * alpha)); 96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setAnimationAngle(float a) { 99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd animate = a; 100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public float getAnimationAngle() { 103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return animate; 104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setEnabled(boolean enabled) { 107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mEnabled = enabled; 108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (mChangeAlphaWhenDisabled) { 109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (mEnabled) { 110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd setAlpha(ENABLED_ALPHA); 111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } else { 112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd setAlpha(DISABLED_ALPHA); 113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean isEnabled() { 118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mEnabled; 119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setSelected(boolean s) { 122d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mSelected = s; 123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean isSelected() { 126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mSelected; 127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 129d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getLevel() { 130d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return level; 131d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 132d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 133d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setGeometry(float st, float sw, int inside, int outside) { 134d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd start = st; 135d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sweep = sw; 136d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd inner = inside; 137d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd outer = outside; 138d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 139d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 140d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setFixedSlice(float center, float sweep) { 141d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mCenter = center; 142d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd this.sweep = sweep; 143d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 144d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 145d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public float getCenter() { 146d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mCenter; 147d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 148d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 149d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public float getStart() { 150d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return start; 151d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 152d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 153d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public float getStartAngle() { 154d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return start + animate; 155d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 156d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 157d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public float getSweep() { 158d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return sweep; 159d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 160d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 161d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getInnerRadius() { 162d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return inner; 163d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 164d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 165d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getOuterRadius() { 166d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return outer; 167d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 168d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 169d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setOnClickListener(OnClickListener listener) { 170d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mOnClickListener = listener; 171d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 172d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 173d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void performClick() { 174d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (mOnClickListener != null) { 175d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mOnClickListener.onClick(this); 176d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 177d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 178d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 179d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getIntrinsicWidth() { 180d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mDrawable.getIntrinsicWidth(); 181d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 182d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 183d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getIntrinsicHeight() { 184d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mDrawable.getIntrinsicHeight(); 185d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 186d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 187d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setBounds(int left, int top, int right, int bottom) { 188d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDrawable.setBounds(left, top, right, bottom); 189d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 190d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 191d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void draw(Canvas canvas) { 192d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDrawable.draw(canvas); 193d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 194d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 195d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setImageResource(Context context, int resId) { 196d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Drawable d = context.getResources().getDrawable(resId).mutate(); 197d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd d.setBounds(mDrawable.getBounds()); 198d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDrawable = d; 199d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd setAlpha(mAlpha); 200d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 201d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 202d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd}