/**
*
*/
package com.gmail.charleszq.picorner.ui;
import java.util.ArrayList;
import java.util.List;
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.ViewGroup;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.github.yuyang226.j500px.photos.Photo;
import com.gmail.charleszq.picorner.R;
import com.gmail.charleszq.picorner.model.ExifData;
import com.gmail.charleszq.picorner.model.GeoLocation;
import com.gmail.charleszq.picorner.model.MediaObject;
import com.gmail.charleszq.picorner.task.IGeneralTaskDoneListener;
import com.gmail.charleszq.picorner.task.flickr.FetchFlickrPhotoExifTask;
import com.gmail.charleszq.picorner.task.px500.PxFetchPhotoExifTask;
import com.gmail.charleszq.picorner.ui.helper.ExifAdapter;
import com.gmail.charleszq.picorner.utils.IConstants;
/**
* @author charles(charleszq@gmail.com)
*
*/
public class PhotoDetailExifDataFragment extends Fragment {
private static final String TAG = PhotoDetailExifDataFragment.class.getName();
private MediaObject mCurrentPhoto;
// view controls
private ProgressBar mProgressBar;
private TextView mNoExifInfoText;
private ListView mExifList;
private List<ExifData> mExifs = new ArrayList<ExifData>();
/**
*
*/
public PhotoDetailExifDataFragment() {
}
public static PhotoDetailExifDataFragment newInstance(MediaObject photo) {
PhotoDetailExifDataFragment f = new PhotoDetailExifDataFragment();
final Bundle bundle = new Bundle();
bundle.putSerializable(IConstants.DETAIL_PAGE_PHOTO_ARG_KEY, photo);
f.setArguments(bundle);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = this.getArguments();
mCurrentPhoto = (MediaObject) bundle
.getSerializable(IConstants.DETAIL_PAGE_PHOTO_ARG_KEY);
this.setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.flickr_exif_list, null);
mProgressBar = (ProgressBar) v
.findViewById(R.id.exif_load_progress_bar);
mNoExifInfoText = (TextView) v.findViewById(R.id.no_exif_info_text);
mExifList = (ListView) v.findViewById(R.id.exif_info_list_view);
final ExifAdapter adapter = new ExifAdapter(getActivity(), mExifs);
mExifList.setAdapter(adapter);
if (!mExifs.isEmpty()) {
mProgressBar.setVisibility(View.INVISIBLE);
return v;
}
switch (mCurrentPhoto.getMediaSource()) {
case INSTAGRAM:
break;
case FLICKR:
FetchFlickrPhotoExifTask task = new FetchFlickrPhotoExifTask(
getActivity());
task.addTaskDoneListener(new IGeneralTaskDoneListener<List<ExifData>>() {
@Override
public void onTaskDone(List<ExifData> result) {
mProgressBar.setVisibility(View.INVISIBLE);
if (result == null || result.isEmpty()) {
mNoExifInfoText.setVisibility(View.VISIBLE);
} else {
mExifs.clear();
mExifs.addAll(result);
adapter.notifyDataSetChanged();
}
}
});
task.execute(mCurrentPhoto.getId(), mCurrentPhoto.getSecret());
break;
case PX500:
PxFetchPhotoExifTask pxTask = new PxFetchPhotoExifTask();
pxTask.addTaskDoneListener(new IGeneralTaskDoneListener<Photo>() {
@Override
public void onTaskDone(Photo result) {
mProgressBar.setVisibility(View.INVISIBLE);
if (result == null) {
mNoExifInfoText.setVisibility(View.VISIBLE);
} else {
MediaObject p = new MediaObject();
p = com.gmail.charleszq.picorner.utils.ModelUtils
.handlePx500PhotoExif(p, result);
mExifs.clear();
mExifs.addAll(p.getExifs());
adapter.notifyDataSetChanged();
try {
if (result.getLatitude() != null
&& result.getLongitude() != null) {
GeoLocation loc = new GeoLocation();
loc.setLatitude(result.getLatitude());
loc.setLongitude(result.getLongitude());
mCurrentPhoto.setLocation(loc);
Log.d(TAG, "lat: " + loc.getLatitude()); //$NON-NLS-1$
Log.d(TAG, "log: " + loc.getLongitude()); //$NON-NLS-1$
((PhotoDetailActivity) getActivity())
.notifyDataChanged();
}
} catch (Exception e) {
// try catch number format exception.
Log.w(TAG,
e.getMessage() == null ? "Unable to get the location information." : e.getMessage()); //$NON-NLS-1$
}
}
}
});
pxTask.execute(mCurrentPhoto.getId());
break;
}
return v;
}
}