package com.lesgens.blindr;
import java.io.InputStream;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.grio.fbphotopicker.FBPhotoPickerActivity;
import com.lesgens.blindr.controllers.Controller;
import com.lesgens.blindr.utils.Utils;
import com.lesgens.blindr.views.SlideshowView;
public class PickFacebookPhotosFragment extends Fragment implements OnClickListener {
private final static int PICKED_PHOTO = 9000;
private SlideshowView slideshow;
private ArrayList<String> urls;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ViewGroup v = (ViewGroup) inflater.inflate(
R.layout.pick_your_photos, container, false);
slideshow = (SlideshowView) v.findViewById(R.id.slideshow);
urls = new ArrayList<String>();
((TextView) v.findViewById(R.id.splash_text)).setTypeface(((FirstTimeExperienceActivity) getActivity()).typeFace);
((ImageView) v.findViewById(R.id.avatar)).setImageBitmap(Controller.getInstance().getMyself().getAvatar());
v.findViewById(R.id.btn_add).setOnClickListener(this);
v.findViewById(R.id.back).setOnClickListener(this);
v.findViewById(R.id.next).setOnClickListener(this);
return v;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == PICKED_PHOTO){
if(resultCode == Activity.RESULT_OK){
String photoUrl = data.getStringExtra(FBPhotoPickerActivity.PHOTO_URL);
new ImageDownloader().execute(photoUrl);
urls.add(photoUrl);
((TextView) getView().findViewById(R.id.empty_text)).setText("");
}
}
}
@Override
public void onDestroy(){
slideshow.recycleBitmaps();
super.onDestroy();
}
public void showErrorTooMuchImages(){
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.btn_add){
if(urls.size() < 5){
Intent i = new Intent(getActivity(), FBPhotoPickerActivity.class);
startActivityForResult(i, PICKED_PHOTO);
} else{
showErrorTooMuchImages();
}
} else if(v.getId() == R.id.next){
((FirstTimeExperienceActivity) getActivity()).goNext();
} else if(v.getId() == R.id.back){
((FirstTimeExperienceActivity) getActivity()).goBack();
}
}
private class ImageDownloader extends AsyncTask<String,Void,Bitmap> {
@Override
protected Bitmap doInBackground(String... param) {
// TODO Auto-generated method stub
return downloadBitmap(param[0]);
}
@Override
protected void onPostExecute(Bitmap result) {
Log.i("Async-Example", "onPostExecute Called");
slideshow.addPicture(result);
}
private Bitmap downloadBitmap(String url) {
// initilize the default HTTP client object
final DefaultHttpClient client = new DefaultHttpClient();
//forming a HttoGet request
final HttpGet getRequest = new HttpGet(url);
try {
HttpResponse response = client.execute(getRequest);
//check 200 OK for success
final int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Log.w("ImageDownloader", "Error " + statusCode +
" while retrieving bitmap from " + url);
return null;
}
final HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream inputStream = null;
try {
// getting contents from the stream
inputStream = entity.getContent();
// decoding stream data back into image Bitmap that android understands
final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
final Bitmap bitmapScaled = Utils.scaleDown(bitmap, Utils.dpInPixels(getActivity(), 300), true);
bitmap.recycle();
return bitmapScaled;
} finally {
if (inputStream != null) {
inputStream.close();
}
entity.consumeContent();
}
}
} catch (Exception e) {
// You Could provide a more explicit error message for IOException
getRequest.abort();
Log.e("ImageDownloader", "Something went wrong while" +
" retrieving bitmap from " + url + e.toString());
}
return null;
}
}
public String getFacebookUrls() {
String facebookUrls = "";
for(int i = 0; i < urls.size(); i++){
if(i > 0){
facebookUrls += ",";
}
facebookUrls += urls.get(i);
}
return facebookUrls;
}
}