Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replaced ELCImagePicker => GMImagePicker #1

Merged
merged 4 commits into from
Aug 19, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added src/android/Library/libs/commons-io-2.4.jar
Binary file not shown.
Binary file added src/android/Library/libs/gson-2.3.1.jar
Binary file not shown.
65 changes: 65 additions & 0 deletions src/android/Library/src/FileNameItem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package com.synconset;

import org.json.JSONException;
import org.json.JSONObject;

import android.os.Parcel;
import android.os.Parcelable;

public class FileNameItem implements Parcelable{
public String thumb;
public String original;
public Integer rotation;

public FileNameItem(){
super();
}

public FileNameItem(Parcel in) {
super();
readFromParcel(in);
}

public static final Parcelable.Creator<FileNameItem> CREATOR = new Parcelable.Creator<FileNameItem>() {
public FileNameItem createFromParcel(Parcel in) {
return new FileNameItem(in);
}

public FileNameItem[] newArray(int size) {

return new FileNameItem[size];
}

};

public void readFromParcel(Parcel in) {
thumb = in.readString();
original = in.readString();
rotation = in.readInt();
}

@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags ) {
// TODO Auto-generated method stub
dest.writeString(thumb);
dest.writeString(original);
dest.writeInt(rotation);
}

/*public JSONObject getJSONObject() {
JSONObject obj = new JSONObject();
try {
obj.put("thumb", thumb);
obj.put("original", orginal);
obj.put("rotation", rotation);
} catch (JSONException e) {
//trace("DefaultListItem.toString JSONException: "+e.getMessage());
}
return obj;
}*/
}
127 changes: 125 additions & 2 deletions src/android/Library/src/ImageFetcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,32 @@

package com.synconset;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.RejectedExecutionException;

import org.apache.commons.io.FileUtils;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.Matrix;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
import android.provider.MediaStore;
import android.util.Log;
Expand All @@ -54,13 +63,43 @@
* performance.
*/
public class ImageFetcher {

private int colWidth;
private long origId;
private ExecutorService executor;

public ImageFetcher() {
File dir_thumb;
private Context context;
private Map<Integer, String> thumbnails = new HashMap<Integer, String>();

public ImageFetcher( Context ct ) {
context = ct;
executor = Executors.newCachedThreadPool();

dir_thumb = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES),"thumb");
if( !dir_thumb.isDirectory() && !dir_thumb.mkdir() ){
// failed
}

try {
FileUtils.cleanDirectory(dir_thumb);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

/**
* Get Thumb URL
* @param id
* @return
*/
public String getThumbFilePath( Integer id ){

String url = thumbnails.get(id);

return url;
}

public void fetch(Integer id, ImageView imageView, int colWidth, int rotate) {
Expand Down Expand Up @@ -230,6 +269,10 @@ protected void onPostExecute(Bitmap bitmap) {
if (isCancelled()) {
bitmap = null;
}

// store bitmap to private storage
storeBitmapToPrivate(position, bitmap);

addBitmapToCache(position, bitmap);
if (imageViewReference != null) {
ImageView imageView = imageViewReference.get();
Expand All @@ -245,6 +288,86 @@ protected void onPostExecute(Bitmap bitmap) {
}
}
}

/**
* Save Thumbnail to private storage.
*/
boolean storeBitmapToPrivate( Integer position, Bitmap bitmap ){

if( thumbnails.containsKey(position) ){
return true;
}

/*String state = Environment.getExternalStorageState();
if ( !Environment.MEDIA_MOUNTED.equals(state)) {
return false;
}
*/

if( !dir_thumb.isDirectory() ){
return false;
}

String state = Environment.getExternalStorageState();
if ( !Environment.MEDIA_MOUNTED.equals(state)) {
return false;
}

File file_thumb;

try {
file_thumb = File.createTempFile("thumb", null, dir_thumb );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}

String url_thumb = file_thumb.getAbsolutePath();

if( !saveBitmapToFileCache(bitmap, file_thumb) ){
file_thumb.delete();
return false;
}

thumbnails.put( position, url_thumb );

return true;
}

private boolean saveBitmapToFileCache(Bitmap bitmap, File file_thumb ) {

//File fileCacheItem = new File(strFilePath);
OutputStream out = null;

boolean result = false;

try
{
//result= fileCacheItem.createNewFile();
out = new FileOutputStream(file_thumb);

bitmap.compress(CompressFormat.JPEG, 100, out);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
out.close();
result = true;
}
catch (IOException e)
{
e.printStackTrace();
}
}

return result;
}

/**
* A fake Drawable that will be attached to the imageView while the download
Expand Down
Loading