package au.com.museumvictoria.fieldguide.bunurong.ui.fragments; import it.sephiroth.android.library.imagezoom.ImageViewTouch; import it.sephiroth.android.library.imagezoom.ImageViewTouchBase.DisplayType; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.Html; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.TextView; import au.com.museumvictoria.fieldguide.bunurong.R; import au.com.museumvictoria.fieldguide.bunurong.provider.Images; import au.com.museumvictoria.fieldguide.bunurong.ui.ImageDetailActivity; import au.com.museumvictoria.fieldguide.bunurong.util.ImageWorker; import au.com.museumvictoria.fieldguide.bunurong.util.Utilities; import com.actionbarsherlock.app.SherlockFragment; public class ImageDetailFragment extends SherlockFragment { private static final String TAG = "Bunurong.ImageDetailFragment"; private static final String IMAGE_DATA_EXTRA = "resId"; private static final String IMAGE_GALLERY_DATA_EXTRA = "galleryReference"; private static final String IMAGE_PATH_DATA_EXTRA = "imagePath"; private int mImageNum; private int mGalleryReference; private String mImagePath; private ImageViewTouch mImageView; private TextView mImageDescription; private TextView mImageCredit; private RelativeLayout imageDetailsLayout; private ImageWorker mImageWorker; public static ImageDetailFragment newInstance(int imageNum) { final ImageDetailFragment f = new ImageDetailFragment(); final Bundle args = new Bundle(); args.putInt(IMAGE_DATA_EXTRA, imageNum); args.putInt(IMAGE_GALLERY_DATA_EXTRA, -1); f.setArguments(args); return f; } public static ImageDetailFragment newInstance(int imageNum, int galleryReference) { final ImageDetailFragment f = new ImageDetailFragment(); final Bundle args = new Bundle(); args.putInt(IMAGE_DATA_EXTRA, imageNum); args.putInt(IMAGE_GALLERY_DATA_EXTRA, galleryReference); args.putString(IMAGE_PATH_DATA_EXTRA, ""); f.setArguments(args); return f; } public static ImageDetailFragment newInstance(String imagePath) { final ImageDetailFragment f = new ImageDetailFragment(); final Bundle args = new Bundle(); args.putString(IMAGE_PATH_DATA_EXTRA, imagePath); f.setArguments(args); return f; } public ImageDetailFragment() { // TODO Auto-generated constructor stub } /** * Populate image number from extra, use the convenience factory method * {@link ImageDetailFragment#newInstance(int)} to create this fragment. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mImageNum = getArguments() != null ? getArguments().getInt(IMAGE_DATA_EXTRA) : -1; mGalleryReference = getArguments() != null ? getArguments().getInt(IMAGE_GALLERY_DATA_EXTRA) : -1; mImagePath = getArguments() != null ? getArguments().getString(IMAGE_PATH_DATA_EXTRA) : ""; Log.d(TAG, "mImageNum: " + mImageNum); Log.d(TAG, "mGalleryReference: " + mGalleryReference); Log.d(TAG, "mImagePath: " + mImagePath); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate and locate the main ImageView final View v = inflater.inflate(R.layout.image_detail_fragment, container, false); mImageView = (ImageViewTouch) v.findViewById(R.id.imageView); mImageDescription = (TextView) v.findViewById(R.id.imageDescription); mImageCredit = (TextView) v.findViewById(R.id.imageCredit); imageDetailsLayout = (RelativeLayout) v.findViewById(R.id.imageDetailsLayout); return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Use the parent activity to load the image asynchronously into the ImageView (so a single // cache can be used over all pages in the ViewPager if (ImageDetailActivity.class.isInstance(getActivity())) { //mImageWorker = ((ImageDetailActivity) getActivity()).getImageWorker(); //mImageWorker.loadImage(mImageNum, mImageView); if (mGalleryReference != -1) { Log.d(TAG, "Got extraCurrentGallery: " + mGalleryReference); String[] tmpImages = getResources().getStringArray(mGalleryReference); String filename = tmpImages[mImageNum].substring(0,2) + ".jpg"; String filedesc = tmpImages[mImageNum].substring(2); String filecred = "Map by Parks Victoria"; try { Log.d(TAG, "filedesc.1: " + filedesc); filedesc = filedesc.substring(0, tmpImages[mImageNum].indexOf("_Photo")-1); Log.d(TAG, "filedesc.2: " + filedesc); filecred = tmpImages[mImageNum].substring(tmpImages[mImageNum].indexOf("_Photo")); } catch (Exception e) { } filedesc = filedesc.replaceAll("_", " ").replaceAll(".jpg", "").trim(); filecred = filecred.replaceAll("_", " ").replaceAll(".jpg", "").trim(); filedesc += "."; filecred += "."; String imgPath = Utilities.GALLERY_IMAGES_FULL_PATH + filename; Log.d(TAG, "Displaying photo: " + filedesc + "(" + filename + ") BY " + filecred); if (mGalleryReference == R.array.list_images_maps) { imgPath = Utilities.MAPS_IMAGES_FULL_PATH + filename; } Drawable d = null; try { d = Drawable.createFromStream(Utilities.getAssetInputStream(getActivity(), imgPath), null); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // set the default image display type mImageView.setDisplayType( DisplayType.FIT_IF_BIGGER ); //mImageView.setImageDrawable(d, true, null, 5.0f); mImageView.setImageDrawable(d); mImageDescription.setText(Html.fromHtml(filedesc)); mImageCredit.setText(Html.fromHtml(filecred)); } else if (mImageNum != -1) { String imgPath = Images.imageUrls[mImageNum]; String[] imageDetails = Images.imageDescrptions[mImageNum].split("__"); Drawable d = null; try { // d = Drawable.createFromStream(getActivity().getAssets().open(imgPath), null); d = Drawable.createFromStream(Utilities.getAssetInputStream(getActivity(), imgPath), null); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // set the default image display type mImageView.setDisplayType( DisplayType.FIT_IF_BIGGER ); //mImageView.setImageDrawable(d, true, null, 5.0f); mImageView.setImageDrawable(d); mImageDescription.setText(Html.fromHtml(imageDetails[0])); mImageCredit.setText(Html.fromHtml(imageDetails[1])); } else if (mImagePath != null) { String imgPath = Utilities.SPECIES_IMAGES_FULL_PATH + "192266.jpg"; String filedesc = "Image description"; String filecred = "Image credit"; Drawable d = null; try { // d = Drawable.createFromStream(getActivity().getAssets().open(imgPath), null); d = Drawable.createFromStream(Utilities.getAssetInputStream(getActivity(), imgPath), null); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // set the default image display type mImageView.setDisplayType( DisplayType.FIT_IF_BIGGER ); //mImageView.setImageDrawable(d, true, null, 5.0f); mImageView.setImageDrawable(d); mImageDescription.setText(filedesc); mImageCredit.setText(filecred); } } // Pass clicks on the ImageView to the parent activity to handle //if (OnClickListener.class.isInstance(getActivity()) && Utils.hasActionBar()) { // mImageView.setOnClickListener((OnClickListener) getActivity()); //} mImageView.setSingleTapListener(new ImageViewTouch.OnImageViewTouchSingleTapListener() { @Override public void onSingleTapConfirmed() { if (imageDetailsLayout.getVisibility() == View.VISIBLE) { imageDetailsLayout.setVisibility(View.INVISIBLE); } else { imageDetailsLayout.setVisibility(View.VISIBLE); } } }); } /** * Cancels the asynchronous work taking place on the ImageView, called by the adapter backing * the ViewPager when the child is destroyed. */ public void cancelWork() { ImageWorker.cancelWork(mImageView); mImageView.setImageDrawable(null); mImageView = null; } }