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