137acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin/* 237acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin * Copyright (C) 2009 The Android Open Source Project 337acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin * 437acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin * Licensed under the Apache License, Version 2.0 (the "License"); 537acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin * you may not use this file except in compliance with the License. 637acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin * You may obtain a copy of the License at 737acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin * 837acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin * http://www.apache.org/licenses/LICENSE-2.0 937acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin * 1037acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin * Unless required by applicable law or agreed to in writing, software 1137acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin * distributed under the License is distributed on an "AS IS" BASIS, 1237acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1337acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin * See the License for the specific language governing permissions and 1437acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin * limitations under the License. 1537acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin */ 1637acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin 1737acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Linpackage com.android.camera; 1837acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin 1937acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Linimport android.content.Context; 2037acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Linimport android.content.res.Resources; 2137acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Linimport android.content.res.TypedArray; 2237acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Linimport android.graphics.drawable.Drawable; 2337acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Linimport android.util.AttributeSet; 2437acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Linimport android.widget.ImageView; 2537acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin 26e480f77352d670b2892a9b7b7cd503838b71ca9fRomain Guyimport com.android.camera.R; 273889cf31101cfd4d336f1ce5ae5122c2cb3c0fdcChih-Chung Chang 2877c1cdc8f2cda250b1db842204efb49f87e094aeChih-Chung Chang/** 2977c1cdc8f2cda250b1db842204efb49f87e094aeChih-Chung Chang * This class draws an icon which changes according to the mode. For example, 30271b3095b9f763421c0547109da9de774795072dChih-Chung Chang * The flash icon can have on, off, and auto modes. The user can use 31271b3095b9f763421c0547109da9de774795072dChih-Chung Chang * {@link #setMode(String)} to change the mode (and the icon). 3277c1cdc8f2cda250b1db842204efb49f87e094aeChih-Chung Chang */ 3337acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Linpublic class IconIndicator extends ImageView { 3437acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin 3537acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin private Drawable[] mIcons; 3637acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin private CharSequence[] mModes; 3737acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin 3837acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin public IconIndicator(Context context, AttributeSet attrs, int defStyle) { 3937acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin super(context, attrs, defStyle); 4037acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin TypedArray a = context.obtainStyledAttributes( 4137acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin attrs, R.styleable.IconIndicator, defStyle, 0); 4237acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin Drawable icons[] = loadIcons(context.getResources(), 4337acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin a.getResourceId(R.styleable.IconIndicator_icons, 0)); 4437acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin CharSequence modes[] = 4537acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin a.getTextArray(R.styleable.IconIndicator_modes); 4637acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin a.recycle(); 4737acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin 4837acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin setModesAndIcons(modes, icons); 49503560f0dc42d6185c61be06f8060dfd50d30d69Owen Lin setImageDrawable(mIcons.length > 0 ? mIcons[0] : null); 5037acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin } 5137acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin 5237acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin public IconIndicator(Context context, AttributeSet attrs) { 5337acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin this(context, attrs, 0); 5437acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin } 5537acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin 5637acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin private Drawable[] loadIcons(Resources resources, int iconsId) { 5737acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin TypedArray array = resources.obtainTypedArray(iconsId); 5837acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin int n = array.length(); 5937acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin Drawable drawable[] = new Drawable[n]; 6037acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin for (int i = 0; i < n; ++i) { 6137acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin int id = array.getResourceId(i, 0); 6237acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin drawable[i] = id == 0 ? null : resources.getDrawable(id); 6337acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin } 6437acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin array.recycle(); 6537acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin return drawable; 6637acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin } 6737acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin 6837acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin private void setModesAndIcons(CharSequence[] modes, Drawable icons[]) { 6937acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin if (modes.length != icons.length || icons.length == 0) { 7037acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin throw new IllegalArgumentException(); 7137acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin } 7237acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin mIcons = icons; 7337acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin mModes = modes; 7437acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin } 7537acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin 7637acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin public void setMode(String mode) { 7737acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin for (int i = 0, n = mModes.length; i < n; ++i) { 7837acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin if (mModes[i].equals(mode)) { 79503560f0dc42d6185c61be06f8060dfd50d30d69Owen Lin setImageDrawable(mIcons[i]); 8037acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin return; 8137acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin } 8237acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin } 8337acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin throw new IllegalArgumentException("unknown mode: " + mode); 8437acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin } 8537acf79b1cc060f355c9cd1803c2bdd5e39deb27Owen Lin} 86