package com.grio.fbphotopicker;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.ListView;
import com.facebook.HttpMethod;
import com.facebook.Request;
import com.facebook.Request.Callback;
import com.facebook.Response;
import com.facebook.Session;
import com.lesgens.blindr.R;
import com.lesgens.blindr.views.CustomYesNoDialog;
@SuppressLint("NewApi")
public class FBPhotoPickerActivity extends Activity {
public static final String PHOTO_ID = "photoId";
public static final String PHOTO_URL = "photoUrl";
public static String TAG = FBPhotoPickerActivity.class.getSimpleName();
private Context mContext;
private Boolean mPhotoGridVisible = false;
private ListView mAlbumsList;
private GridView mPhotosGrid;
private List<FBPhoto> mPhotos;
private LinearLayout mProgressOverlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_fb_photo_picker);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
if (getActionBar() != null)
getActionBar().setTitle(R.string.activity_title);
mContext = this;
mAlbumsList = (ListView) findViewById(R.id.listView_albums);
mPhotosGrid = (GridView) findViewById(R.id.gridView_photos);
mProgressOverlay = (LinearLayout) findViewById(R.id.progress_overlay);
mProgressOverlay.setVisibility(View.VISIBLE);
Bundle params = new Bundle();
params.putString(Constants.FB_FIELDS_PARAM, Constants.FB_PHOTO_ALBUM_FIELDS);
new Request(Session.getActiveSession(), "me", params, HttpMethod.GET, new Callback() {
@Override
public void onCompleted(Response response) {
if (response.getGraphObject() != null) {
JSONObject json = response.getGraphObject().getInnerJSONObject();
final List<FBAlbum> fbAlbums = new ArrayList<FBAlbum>();
try {
JSONArray jsonFBAlbums = json.getJSONObject("albums").getJSONArray("data");
for (int i = 0; i < jsonFBAlbums.length(); i++) {
JSONObject jsonAlbum = jsonFBAlbums.getJSONObject(i);
if (!jsonAlbum.has("photos"))
continue;
FBAlbum fbAlbum = new FBAlbum();
fbAlbum.setName(jsonAlbum.getString("name"));
String coverImageId = jsonAlbum.getString("cover_photo");
fbAlbum.setCount(jsonAlbum.getInt("count"));
JSONArray jsonPhotos = jsonAlbum.getJSONObject("photos").getJSONArray(
"data");
for (int j = 0; j < jsonPhotos.length(); j++) {
JSONObject jsonFBPhoto = jsonPhotos.getJSONObject(j);
FBPhoto fbPhoto = new FBPhoto();
fbPhoto.setId(jsonFBPhoto.getString("id"));
fbPhoto.setUrl(jsonFBPhoto.getString("picture"));
fbPhoto.setSource(jsonFBPhoto.getString("source"));
if (fbPhoto.getId().equals(coverImageId)) {
fbAlbum.setCoverPhoto(fbPhoto.getUrl());
}
fbAlbum.getPhotos().add(fbPhoto);
}
fbAlbums.add(fbAlbum);
}
mAlbumsList.setAdapter(new FBAlbumArrayAdapter(mContext, 0, fbAlbums));
mAlbumsList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
mPhotos = fbAlbums.get(position).getPhotos();
mPhotosGrid
.setAdapter(new FBPhotoArrayAdapter(mContext, 0, mPhotos));
// TODO: check for API Level before animating
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1)
mAlbumsList.animate().x(-mAlbumsList.getWidth());
else
mAlbumsList.setVisibility(View.GONE);
mPhotoGridVisible = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
if (getActionBar() != null)
getActionBar().setTitle(fbAlbums.get(position).getName());
}
});
mPhotosGrid.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position,
long id) {
CustomYesNoDialog dialog = new CustomYesNoDialog(FBPhotoPickerActivity.this){
@Override
public void onPositiveClick() {
super.onPositiveClick();
Intent resultData = new Intent();
resultData.putExtra(PHOTO_ID, mPhotos.get(position).getId());
resultData.putExtra(PHOTO_URL, mPhotos.get(position).getSource());
setResult(Activity.RESULT_OK, resultData);
finish();
}
};
dialog.show();
dialog.setDialogText(R.string.use_photo);
}
});
mProgressOverlay.setVisibility(View.GONE);
} catch (JSONException e) {
Log.e(TAG, e.getMessage());
mProgressOverlay.setVisibility(View.GONE);
}
}
}
}).executeAsync();
super.onCreate(savedInstanceState);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
goBack();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
@SuppressLint("NewApi")
private void goBack() {
if (mPhotoGridVisible) {
mPhotosGrid.setAdapter(null);
// TODO: check for API Level before animating
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
mAlbumsList.animate().x(0);
else
mAlbumsList.setVisibility(View.VISIBLE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
if (getActionBar() != null)
getActionBar().setTitle(R.string.activity_title);
mPhotoGridVisible = false;
} else {
finish();
}
}
}