/[projects]/android/Side9/src/dk/thoerup/side9/ImageAdapter.java
ViewVC logotype

Annotation of /android/Side9/src/dk/thoerup/side9/ImageAdapter.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1224 - (hide annotations) (download)
Wed Feb 9 17:39:54 2011 UTC (13 years, 3 months ago) by torben
File size: 6477 byte(s)
Cleanup and annotations
1 torben 790 package dk.thoerup.side9;
2    
3     import java.io.File;
4 torben 1013 import java.io.FileOutputStream;
5 torben 925 import java.io.FilenameFilter;
6 torben 1013 import java.io.IOException;
7 torben 1185 import java.io.RandomAccessFile;
8 torben 790 import java.util.ArrayList;
9 torben 1224
10 torben 1185 import java.util.Collections;
11 torben 790
12     import android.content.Context;
13     import android.graphics.Bitmap;
14     import android.graphics.BitmapFactory;
15 torben 1013 import android.graphics.Bitmap.CompressFormat;
16 torben 790 import android.os.Environment;
17 torben 915 import android.util.DisplayMetrics;
18 torben 1013 import android.util.Log;
19 torben 790 import android.view.View;
20     import android.view.ViewGroup;
21 torben 915 import android.view.WindowManager;
22 torben 790 import android.widget.BaseAdapter;
23     import android.widget.GridView;
24     import android.widget.ImageView;
25 torben 912 import android.widget.Toast;
26 torben 790
27     public class ImageAdapter extends BaseAdapter {
28 torben 1222 final static String DIR_NAME = "/Side9";
29     final static String THUMBDIR_NAME = "/.thumb/";
30 torben 1185
31 torben 1223 //int mGalleryItemBackground;
32 torben 790 private Context mContext;
33    
34 torben 1185 ArrayList<ImageEntry> mImages = new ArrayList<ImageEntry>();
35 torben 915
36 torben 1185 int thumbSize;
37 torben 1222
38 torben 790
39 torben 1222
40 torben 790 public ImageAdapter(Context c) {
41     mContext = c;
42    
43 torben 1222 String path = Environment.getExternalStorageDirectory().getPath() + DIR_NAME ;
44    
45 torben 790
46     File root = new File(path);
47 torben 912
48     if (root.exists() == false) {
49     Toast.makeText(mContext, "Side9 folder not found on sdcard", Toast.LENGTH_LONG).show();
50     return;
51     }
52 torben 925
53     File files[] = root.listFiles( new ExtensionFilter("jpg") );
54 torben 1222
55 torben 912
56 torben 1222 for (File f : files) {
57 torben 1185 ImageEntry entry = new ImageEntry();
58     entry.path = f.getPath();
59 torben 1013
60 torben 1223 //entry.thumb = generateAndLoadThumb(f);
61 torben 1222
62 torben 1013
63 torben 1185 /* load captions */
64     String infoFileName = f.getPath().replace(".jpg", ".txt");
65    
66     File infoFile = new File(infoFileName);
67     if (infoFile.exists() ) {
68     entry.caption = cleanString( getFileContent(infoFile) );
69     } else {
70     entry.caption = "";
71     }
72    
73     mImages.add(entry);
74 torben 1013 }
75    
76 torben 1185 Collections.sort(mImages, new ImageEntry.PathComparator() );
77    
78     thumbSize = getSize();
79 torben 790 }
80 torben 1185
81 torben 1212 public void cleanUp() {
82     mImages.clear();
83     }
84    
85 torben 1223 public static Bitmap generateAndLoadThumb(File image) {
86    
87     File thumbDir = new File(Environment.getExternalStorageDirectory().getPath() + DIR_NAME + THUMBDIR_NAME);
88     String fileName = image.getName();
89     File thumb = new File ( thumbDir.getPath() + "/" + fileName );
90    
91     Bitmap thumbBmp = null;
92    
93     if (! thumbDir.exists()) {
94     thumbDir.mkdirs();
95     }
96    
97     if (! thumb.exists() || thumb.lastModified() < image.lastModified()) {
98     Bitmap bmp = BitmapFactory.decodeFile( image.getPath() );
99     thumbBmp = Bitmap.createScaledBitmap(bmp, bmp.getWidth()/4, bmp.getHeight()/4, true);
100    
101     try {
102     FileOutputStream fos = new FileOutputStream(thumb);
103     thumbBmp.compress(CompressFormat.JPEG, 90, fos);
104     fos.close();
105    
106     } catch (IOException e) {
107     Log.e("Side9", "error", e);
108     }
109    
110     } else {
111     thumbBmp = BitmapFactory.decodeFile( thumb.getPath());
112     }
113     return thumbBmp;
114     }
115    
116 torben 1185 public void orderByPath() {
117     Collections.sort(mImages, new ImageEntry.PathComparator());
118     this.notifyDataSetChanged();
119     }
120    
121     public void orderByCaption() {
122     Collections.sort(mImages, new ImageEntry.CaptionComparator());
123     this.notifyDataSetChanged();
124     }
125    
126 torben 1224 @Override
127 torben 790 public int getCount() {
128 torben 1185 return mImages.size();
129 torben 790 }
130    
131 torben 1224 @Override
132 torben 790 public Object getItem(int position) {
133     return position;
134     }
135    
136 torben 1224 @Override
137 torben 790 public long getItemId(int position) {
138     return position;
139     }
140    
141 torben 1185 public ImageEntry getImageEntry(int position) {
142     return mImages.get(position);
143 torben 790 }
144 torben 915
145 torben 1185 public ArrayList<ImageEntry> getImages() {
146     return mImages;
147 torben 925 }
148    
149 torben 915 private int getSize() {
150     DisplayMetrics metrics = new DisplayMetrics();
151     WindowManager wmgr = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
152     wmgr.getDefaultDisplay().getMetrics(metrics);
153     if (metrics.widthPixels < 480) {
154     return 150;
155     } else {
156     return 200;
157     }
158     }
159 torben 790
160 torben 1224 @Override
161 torben 790 public View getView(int position, View convertView, ViewGroup parent) {
162 torben 1223
163     if (position >= mImages.size()) {
164     return null;
165     }
166    
167     ImageEntry currentEntry = mImages.get(position);
168    
169     if (currentEntry.thumb == null ) {
170     File thumb = new File ( currentEntry.path );
171     currentEntry.thumb = generateAndLoadThumb(thumb);
172     }
173    
174 torben 790 ImageView imageView;
175     if (convertView == null) { // if it's not recycled, initialize some attributes
176     imageView = new ImageView(mContext);
177 torben 1185 imageView.setLayoutParams(new GridView.LayoutParams(thumbSize, thumbSize));
178 torben 790 imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
179     imageView.setAdjustViewBounds(true);
180     imageView.setPadding(4, 4, 4, 4);
181     } else {
182     imageView = (ImageView) convertView;
183     }
184    
185 torben 1013 //imageView.setImageURI( Uri.parse(mThumbPaths.get(position)) );
186 torben 1223 imageView.setImageBitmap( currentEntry.thumb );
187 torben 790 return imageView;
188 torben 925 }
189    
190 torben 1185 String getFileContent(File filename) {
191     try {
192     RandomAccessFile raf = new RandomAccessFile(filename, "r");
193     int size = (int)raf.length();
194     byte buf[] = new byte[size];
195    
196 torben 1186 raf.readFully(buf);
197     raf.close();
198    
199 torben 1185 return new String(buf);
200     } catch (IOException e) {
201     Log.e("Side9", "Error", e);
202     return "";
203     }
204     }
205    
206     String cleanString(String input) { //trim and remove double spaces
207     String res = input.trim();
208     while ( res.contains( " ")) {
209     res = res.replace(" ", " ");
210     }
211    
212     return res;
213     }
214    
215    
216    
217    
218    
219 torben 925 class ExtensionFilter implements FilenameFilter {
220     private String mExt;
221     public ExtensionFilter(String ext) {
222     mExt = ext;
223     }
224 torben 790
225 torben 925 @Override
226     public boolean accept(File dir, String filename) {
227     String parts[] = filename.split("\\.");
228     if (parts.length > 1) {
229     String ext = parts[ parts.length -1];
230     if (ext.equals(mExt)) {
231     return true;
232     }
233     }
234     return false;
235     }
236    
237 torben 790 }
238     }

  ViewVC Help
Powered by ViewVC 1.1.20