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