+++ /dev/null
-package org.openintents.filemanager;\r
-\r
-/* $Id: BulletedTextListAdapter.java 57 2007-11-21 18:31:52Z steven $ \r
- * \r
- * Copyright 2007 Steven Osborn \r
- * \r
- * Licensed under the Apache License, Version 2.0 (the "License"); \r
- * you may not use this file except in compliance with the License. \r
- * You may obtain a copy of the License at \r
- * \r
- * http://www.apache.org/licenses/LICENSE-2.0 \r
- * \r
- * Unless required by applicable law or agreed to in writing, software \r
- * distributed under the License is distributed on an "AS IS" BASIS, \r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. \r
- * See the License for the specific language governing permissions and \r
- * limitations under the License. \r
- */ \r
-\r
-import java.io.File;\r
-import java.util.ArrayList; \r
-import java.util.List; \r
-\r
-import org.openintents.filemanager.util.FileUtils;\r
-import org.openintents.filemanager.util.MimeTypes;\r
-\r
-import android.content.Context; \r
-import android.graphics.Bitmap;\r
-import android.graphics.BitmapFactory;\r
-import android.graphics.drawable.Drawable;\r
-import android.view.View; \r
-import android.view.ViewGroup; \r
-import android.widget.BaseAdapter; \r
-import android.widget.Filter;\r
-import android.widget.Filterable;\r
-\r
-/** @author Steven Osborn - http://steven.bitsetters.com */ \r
-public class IconifiedTextListAdapter extends BaseAdapter implements Filterable { \r
-\r
- /** Remember our context so we can use it when constructing views. */ \r
- private Context mContext; \r
- \r
- private static String lastFilter;\r
- \r
- class IconifiedFilter extends Filter {\r
- @Override\r
- protected FilterResults performFiltering(CharSequence arg0) {\r
- \r
- lastFilter = (arg0 != null) ? arg0.toString() : null;\r
- \r
- Filter.FilterResults results = new Filter.FilterResults();\r
-\r
- // No results yet?\r
- if (mOriginalItems == null) {\r
- results.count = 0;\r
- results.values = null;\r
- return results;\r
- }\r
- \r
- int count = mOriginalItems.size();\r
-\r
- if (arg0 == null || arg0.length() == 0) {\r
- results.count = count;\r
- results.values = mOriginalItems;\r
- return results;\r
- }\r
- \r
- \r
- List<IconifiedText> filteredItems = new ArrayList<IconifiedText>(count);\r
- \r
- int outCount = 0;\r
- CharSequence lowerCs = arg0.toString().toLowerCase();\r
- \r
- \r
- for (int x=0; x<count; x++) {\r
- IconifiedText text = mOriginalItems.get(x);\r
- \r
- if (text.getText().toLowerCase().contains(lowerCs)) {\r
- // This one matches.\r
- filteredItems.add(text);\r
- outCount++;\r
- }\r
- }\r
- \r
- results.count = outCount;\r
- results.values = filteredItems;\r
- return results;\r
- }\r
-\r
- @Override\r
- protected void publishResults(CharSequence arg0, FilterResults arg1) {\r
- mItems = (List<IconifiedText>) arg1.values;\r
- notifyDataSetChanged();\r
- }\r
- \r
- List<IconifiedText> synchronousFilter(CharSequence filter) {\r
- FilterResults results = performFiltering(filter);\r
- return (List<IconifiedText>) (results.values);\r
- }\r
- }\r
- \r
- private IconifiedFilter mFilter = new IconifiedFilter();\r
-\r
- private List<IconifiedText> mItems = new ArrayList<IconifiedText>(); \r
- private List<IconifiedText> mOriginalItems = new ArrayList<IconifiedText>();\r
- \r
- private Drawable mIconChecked;\r
- private Drawable mIconUnchecked;\r
- \r
- public ThumbnailLoader mThumbnailLoader;\r
- \r
- private File parentFile;\r
- \r
- private MimeTypes mMimeTypes;\r
- \r
- private boolean scrolling = false;\r
- \r
- public IconifiedTextListAdapter(Context context) { \r
- mContext = context; \r
- \r
- mThumbnailLoader = new ThumbnailLoader(context);\r
- \r
- // Cache the checked and unchecked icons so we're not decoding them everytime getView is called.\r
- mIconChecked = context.getResources().getDrawable(R.drawable.ic_button_checked);\r
- mIconUnchecked = context.getResources().getDrawable(R.drawable.ic_button_unchecked);\r
- } \r
-\r
- public void addItem(IconifiedText it) { mItems.add(it); } \r
-\r
- public void setListItems(List<IconifiedText> lit, boolean filter, File parentFile, MimeTypes mimeTypes) {\r
- mOriginalItems = lit;\r
- this.parentFile = parentFile;\r
- mMimeTypes = mimeTypes;\r
- \r
- if (filter) {\r
- mItems = mFilter.synchronousFilter(lastFilter);\r
- } else {\r
- mItems = lit;\r
- }\r
- } \r
-\r
- /** @return The number of items in the */ \r
- public int getCount() { return mItems.size(); } \r
-\r
- public Object getItem(int position) { return mItems.get(position); } \r
-\r
- public boolean areAllItemsSelectable() { return false; } \r
-/*\r
- public boolean isSelectable(int position) { \r
- try{ \r
- return mItems.get(position).isSelectable(); \r
- }catch (IndexOutOfBoundsException aioobe){ \r
- return super.isSelectable(position); \r
- } \r
- } \r
- */\r
-\r
- /** Use the array index as a unique id. */ \r
- public long getItemId(int position) { \r
- return position; \r
- } \r
- \r
- public ThumbnailLoader getThumbnailLoader(){\r
- return mThumbnailLoader;\r
- }\r
-\r
- public void toggleScrolling(boolean isScrolling){\r
- scrolling = isScrolling;\r
- }\r
- \r
- /** @param convertView The old view to overwrite, if one is passed \r
- * @returns a IconifiedTextView that holds wraps around an IconifiedText */ \r
- public View getView(int position, View convertView, ViewGroup parent) { \r
- IconifiedText curItem = mItems.get(position);\r
- IconifiedTextView btv; \r
- if (convertView == null) { \r
- btv = new IconifiedTextView(mContext, curItem); \r
- } else { // Reuse/Overwrite the View passed \r
- // We are assuming(!) that it is castable! \r
- btv = (IconifiedTextView) convertView; \r
- } \r
- btv.setText(curItem.getText()); \r
- btv.setInfo(curItem.getInfo()); \r
- if(curItem.isCheckIconVisible()){\r
- btv.setCheckVisible(true);\r
- if(curItem.isSelected()){\r
- btv.setCheckDrawable(mIconChecked);\r
- } else {\r
- btv.setCheckDrawable(mIconUnchecked);\r
- }\r
- } else {\r
- btv.setCheckVisible(false);\r
- }\r
- \r
- Object icon = curItem.getIconBitmap();\r
- if(icon instanceof Bitmap){\r
- btv.setIcon((Bitmap) icon);\r
- } else {\r
- btv.setIcon((Drawable) icon);\r
- }\r
- \r
- if(!scrolling && FileUtils.getFile(parentFile, curItem.getText()).isFile() && !"video/mpeg".equals(mMimeTypes.getMimeType(curItem.getText()))){\r
- if(mThumbnailLoader != null) {\r
- mThumbnailLoader.loadImage(parentFile.getPath(), curItem, btv.getImageView());\r
- }\r
- }\r
- \r
- return btv; \r
- }\r
-\r
- public Filter getFilter() {\r
- return mFilter;\r
- } \r
- \r
- public void cancelLoader(){\r
- mThumbnailLoader.cancel();\r
- }\r
-}
\ No newline at end of file