IconListPreference.java revision 3889cf31101cfd4d336f1ce5ae5122c2cb3c0fdc
12f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin/*
22f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin * Copyright (C) 2009 The Android Open Source Project
32f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin *
42f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin * Licensed under the Apache License, Version 2.0 (the "License");
52f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin * you may not use this file except in compliance with the License.
62f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin * You may obtain a copy of the License at
72f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin *
82f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin *      http://www.apache.org/licenses/LICENSE-2.0
92f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin *
102f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin * Unless required by applicable law or agreed to in writing, software
112f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin * distributed under the License is distributed on an "AS IS" BASIS,
122f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin * See the License for the specific language governing permissions and
142f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin * limitations under the License.
152f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin */
162f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin
172f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Linpackage com.android.camera;
182f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin
192f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Linimport android.content.Context;
202f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Linimport android.content.res.Resources;
212f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Linimport android.content.res.TypedArray;
222f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Linimport android.graphics.drawable.Drawable;
232f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Linimport android.util.AttributeSet;
242f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin
253889cf31101cfd4d336f1ce5ae5122c2cb3c0fdcChih-Chung Changimport com.google.android.camera.R;
263889cf31101cfd4d336f1ce5ae5122c2cb3c0fdcChih-Chung Chang
27271b3095b9f763421c0547109da9de774795072dChih-Chung Chang/** A {@code ListPreference} where each entry has a corresponding icon. */
282f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Linpublic class IconListPreference extends ListPreference {
294de149ceb47f2c251f646419907424bfb67d2b64Owen Lin
304de149ceb47f2c251f646419907424bfb67d2b64Owen Lin    private final int mIconIds[];
314de149ceb47f2c251f646419907424bfb67d2b64Owen Lin    private final int mLargeIconIds[];
324de149ceb47f2c251f646419907424bfb67d2b64Owen Lin
332f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin    private Drawable mIcons[];
344de149ceb47f2c251f646419907424bfb67d2b64Owen Lin    private final Resources mResources;
352f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin
362f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin    public IconListPreference(Context context, AttributeSet attrs) {
372f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin        super(context, attrs);
382f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin        TypedArray a = context.obtainStyledAttributes(
392f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin                attrs, R.styleable.IconListPreference, 0, 0);
402f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin        mResources = context.getResources();
414de149ceb47f2c251f646419907424bfb67d2b64Owen Lin        mIconIds = getIconIds(a.getResourceId(
424de149ceb47f2c251f646419907424bfb67d2b64Owen Lin                R.styleable.IconListPreference_icons, 0));
434de149ceb47f2c251f646419907424bfb67d2b64Owen Lin        mLargeIconIds = getIconIds(a.getResourceId(
444de149ceb47f2c251f646419907424bfb67d2b64Owen Lin                R.styleable.IconListPreference_largeIcons, 0));
452f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin        a.recycle();
462f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin    }
472f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin
482f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin    public Drawable[] getIcons() {
494de149ceb47f2c251f646419907424bfb67d2b64Owen Lin        if (mIcons == null) {
504de149ceb47f2c251f646419907424bfb67d2b64Owen Lin            int n = mIconIds.length;
514de149ceb47f2c251f646419907424bfb67d2b64Owen Lin            Drawable[] drawable = new Drawable[n];
524de149ceb47f2c251f646419907424bfb67d2b64Owen Lin            int[] id = mIconIds;
534de149ceb47f2c251f646419907424bfb67d2b64Owen Lin            for (int i = 0; i < n; ++i) {
544de149ceb47f2c251f646419907424bfb67d2b64Owen Lin                drawable[i] = id[i] == 0 ? null : mResources.getDrawable(id[i]);
554de149ceb47f2c251f646419907424bfb67d2b64Owen Lin            }
564de149ceb47f2c251f646419907424bfb67d2b64Owen Lin            mIcons = drawable;
574de149ceb47f2c251f646419907424bfb67d2b64Owen Lin        }
582f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin        return mIcons;
592f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin    }
602f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin
614de149ceb47f2c251f646419907424bfb67d2b64Owen Lin    public int[] getLargeIconIds() {
624de149ceb47f2c251f646419907424bfb67d2b64Owen Lin        return mLargeIconIds;
634de149ceb47f2c251f646419907424bfb67d2b64Owen Lin    }
644de149ceb47f2c251f646419907424bfb67d2b64Owen Lin
654de149ceb47f2c251f646419907424bfb67d2b64Owen Lin    public int[] getIconIds() {
664de149ceb47f2c251f646419907424bfb67d2b64Owen Lin        return mIconIds;
674de149ceb47f2c251f646419907424bfb67d2b64Owen Lin    }
684de149ceb47f2c251f646419907424bfb67d2b64Owen Lin
694de149ceb47f2c251f646419907424bfb67d2b64Owen Lin    private int[] getIconIds(int iconsRes) {
704de149ceb47f2c251f646419907424bfb67d2b64Owen Lin        if (iconsRes == 0) return null;
712f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin        TypedArray array = mResources.obtainTypedArray(iconsRes);
722f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin        int n = array.length();
734de149ceb47f2c251f646419907424bfb67d2b64Owen Lin        int ids[] = new int[n];
742f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin        for (int i = 0; i < n; ++i) {
754de149ceb47f2c251f646419907424bfb67d2b64Owen Lin            ids[i] = array.getResourceId(i, 0);
762f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin        }
772f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin        array.recycle();
784de149ceb47f2c251f646419907424bfb67d2b64Owen Lin        return ids;
792f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin    }
802f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin
812f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin    public void setIcons(Drawable[] icons) {
822f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin        mIcons = icons;
832f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin    }
842f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin}
85