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.util.AttributeSet; 232f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin 24e480f77352d670b2892a9b7b7cd503838b71ca9fRomain Guyimport com.android.camera.R; 253889cf31101cfd4d336f1ce5ae5122c2cb3c0fdcChih-Chung Chang 261e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Linimport java.util.List; 271e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin 28271b3095b9f763421c0547109da9de774795072dChih-Chung Chang/** A {@code ListPreference} where each entry has a corresponding icon. */ 292f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Linpublic class IconListPreference extends ListPreference { 30e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li private int mSingleIconId; 311e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin private int mIconIds[]; 321e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin private int mLargeIconIds[]; 33dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li private int mImageIds[]; 342f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin 352f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin public IconListPreference(Context context, AttributeSet attrs) { 362f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin super(context, attrs); 372f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin TypedArray a = context.obtainStyledAttributes( 382f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin attrs, R.styleable.IconListPreference, 0, 0); 391e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin Resources res = context.getResources(); 40e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li mSingleIconId = a.getResourceId( 41e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li R.styleable.IconListPreference_singleIcon, 0); 42dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li mIconIds = getIds(res, a.getResourceId( 434de149ceb47f2c251f646419907424bfb67d2b64Owen Lin R.styleable.IconListPreference_icons, 0)); 44dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li mLargeIconIds = getIds(res, a.getResourceId( 454de149ceb47f2c251f646419907424bfb67d2b64Owen Lin R.styleable.IconListPreference_largeIcons, 0)); 46dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li mImageIds = getIds(res, a.getResourceId( 47dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li R.styleable.IconListPreference_images, 0)); 482f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin a.recycle(); 492f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin } 502f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin 51e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li public int getSingleIcon() { 52e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li return mSingleIconId; 53e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li } 54e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li 554de149ceb47f2c251f646419907424bfb67d2b64Owen Lin public int[] getIconIds() { 564de149ceb47f2c251f646419907424bfb67d2b64Owen Lin return mIconIds; 574de149ceb47f2c251f646419907424bfb67d2b64Owen Lin } 584de149ceb47f2c251f646419907424bfb67d2b64Owen Lin 59dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li public int[] getLargeIconIds() { 60dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li return mLargeIconIds; 61dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li } 62dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li 63dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li public int[] getImageIds() { 64dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li return mImageIds; 657add00693c1ec910bc8700fe046ee18cbe4e1148Wu-cheng Li } 667add00693c1ec910bc8700fe046ee18cbe4e1148Wu-cheng Li 677add00693c1ec910bc8700fe046ee18cbe4e1148Wu-cheng Li public void setIconIds(int[] iconIds) { 687add00693c1ec910bc8700fe046ee18cbe4e1148Wu-cheng Li mIconIds = iconIds; 697add00693c1ec910bc8700fe046ee18cbe4e1148Wu-cheng Li } 707add00693c1ec910bc8700fe046ee18cbe4e1148Wu-cheng Li 71dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li public void setLargeIconIds(int[] largeIconIds) { 72dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li mLargeIconIds = largeIconIds; 73dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li } 74dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li 75dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li private int[] getIds(Resources res, int iconsRes) { 764de149ceb47f2c251f646419907424bfb67d2b64Owen Lin if (iconsRes == 0) return null; 771e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin TypedArray array = res.obtainTypedArray(iconsRes); 782f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin int n = array.length(); 794de149ceb47f2c251f646419907424bfb67d2b64Owen Lin int ids[] = new int[n]; 802f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin for (int i = 0; i < n; ++i) { 814de149ceb47f2c251f646419907424bfb67d2b64Owen Lin ids[i] = array.getResourceId(i, 0); 822f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin } 832f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin array.recycle(); 844de149ceb47f2c251f646419907424bfb67d2b64Owen Lin return ids; 852f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin } 862f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin 871e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin @Override 881e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin public void filterUnsupported(List<String> supported) { 891e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin CharSequence entryValues[] = getEntryValues(); 901e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin IntArray iconIds = new IntArray(); 911e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin IntArray largeIconIds = new IntArray(); 92dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li IntArray imageIds = new IntArray(); 931e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin 941e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin for (int i = 0, len = entryValues.length; i < len; i++) { 951e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin if (supported.indexOf(entryValues[i].toString()) >= 0) { 96dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li if (mIconIds != null) iconIds.add(mIconIds[i]); 97e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li if (mLargeIconIds != null) largeIconIds.add(mLargeIconIds[i]); 98dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li if (mImageIds != null) imageIds.add(mImageIds[i]); 991e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin } 1001e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin } 101b48a6f5753d554f217bf77df97c47770f7265378Nipun Kwatra if (mIconIds != null) mIconIds = iconIds.toArray(new int[iconIds.size()]); 102e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li if (mLargeIconIds != null) { 103e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li mLargeIconIds = largeIconIds.toArray(new int[largeIconIds.size()]); 104e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li } 105dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li if (mImageIds != null) mImageIds = imageIds.toArray(new int[imageIds.size()]); 1061e7d70c59c3547db7589c1cae977e98d9b4e95b9Owen Lin super.filterUnsupported(supported); 1072f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin } 1082f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin} 109