package com.dozuki.ifixit.ui.guide.create; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.util.DisplayMetrics; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnLongClickListener; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.Toast; import com.dozuki.ifixit.App; import com.dozuki.ifixit.R; import com.dozuki.ifixit.model.Image; import com.dozuki.ifixit.ui.BaseFragment; import com.dozuki.ifixit.ui.gallery.GalleryActivity; import com.dozuki.ifixit.ui.guide.ThumbnailView; import com.dozuki.ifixit.util.CaptureHelper; import com.dozuki.ifixit.util.api.Api; import com.dozuki.ifixit.util.api.ApiCall; import com.google.analytics.tracking.android.MapBuilder; import com.squareup.otto.Bus; import java.io.File; import java.io.IOException; import java.util.ArrayList; public class StepEditImageFragment extends BaseFragment { private static final int COPY_TO_MEDIA_MANAGER = 0; private static final int DETACH_TO_MEDIA_MANAGER = 1; private static final int DELETE_FROM_STEP = 2; private static final String IMAGES_KEY = "IMAGES_KEY"; private static final int CAPTURE_IMAGE = 0; private static final int MEDIA_MANAGER = 1; private Activity mContext; // images private ThumbnailView mThumbs; private ArrayList<Image> mImages; ///////////////////////////////////////////////////// // LIFECYCLE ///////////////////////////////////////////////////// @Override public void onCreate(Bundle savedInstanceState) { mContext = getActivity(); super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View v = inflater.inflate(R.layout.guide_create_step_edit_image, container, false); mThumbs = (ThumbnailView) v.findViewById(R.id.thumbnail_viewer); DisplayMetrics metrics = new DisplayMetrics(); if (App.get().inPortraitMode()) { ((LinearLayout) v).setOrientation(LinearLayout.HORIZONTAL); } if (savedInstanceState != null) { mImages = (ArrayList<Image>) savedInstanceState.getSerializable(IMAGES_KEY); } mContext.getWindowManager().getDefaultDisplay().getMetrics(metrics); mThumbs.setDisplayMetrics(metrics); mThumbs.setNavigationHeight(navigationHeight()); // Initialize the step thumbnails and set the main image to the first thumbnail if it exists if (mImages != null && mImages.size() > 0) { mThumbs.setThumbs(mImages, false); } else { mThumbs.setAddImageMain(); mThumbs.fitToSpace(); } return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mThumbs.setAddThumbButtonOnClick(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setTitle(App.get().getString(R.string.step_edit_new_thumb_actions_title)) .setItems(R.array.new_image_actions, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent; switch (which) { case CAPTURE_IMAGE: App.sendEvent("ui_action", "add_image", "add_from_camera", null); try { Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); String imageFileName = CaptureHelper.getFileName(); File file = File.createTempFile(imageFileName, ".jpg", CaptureHelper.getAlbumDir()); String tempFileName = file.getAbsolutePath(); if (isAdded()) { SharedPreferences prefs = getActivity().getSharedPreferences( "com.dozuki.ifixit", Context.MODE_PRIVATE); prefs.edit().putString(StepEditActivity.TEMP_FILE_NAME_KEY, tempFileName).commit(); } cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); mContext.startActivityForResult(cameraIntent, StepEditActivity.CAMERA_REQUEST_CODE); } catch (IOException e) { Log.e("StepEditImageFragment", "Capture image", e); Toast.makeText(mContext, "Please insert an SD card.", Toast.LENGTH_SHORT).show(); } break; case MEDIA_MANAGER: App.sendEvent("ui_action", "add_image", "add_from_gallery", null); intent = new Intent(mContext, GalleryActivity.class); intent.putExtra(GalleryActivity.ACTIVITY_RETURN_MODE, 1); intent.putExtra(GalleryActivity.ATTACHED_MEDIA_IDS, mImages); mContext.startActivityForResult(intent, StepEditActivity.GALLERY_REQUEST_CODE); break; } } }); builder.create().show(); } }); mThumbs.setThumbsOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(final View v) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder .setTitle(mContext.getString(R.string.step_edit_existing_image_actions_title)) .setItems(R.array.existing_image_actions, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Image thumbImage = (Image) v.getTag(); switch (which) { case COPY_TO_MEDIA_MANAGER: App.sendEvent("ui_action", "edit_image", "copy_to_media_manager", null); Api.call(getActivity(), ApiCall.copyImage(thumbImage.getId() + "")); break; case DETACH_TO_MEDIA_MANAGER: App.sendEvent("ui_action", "edit_image", "detach_to_media_manager", null); Api.call(getActivity(), ApiCall.copyImage(thumbImage.getId() + "")); case DELETE_FROM_STEP: App.sendEvent("ui_action", "edit_image", "delete_from_step", null); mThumbs.removeThumb(v); mImages.remove(thumbImage); Bus bus = App.getBus(); bus.post(new StepImageDeleteEvent(thumbImage)); bus.post(new StepChangedEvent()); break; } } }); builder.create().show(); return true; } }); } @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); savedInstanceState.putSerializable(IMAGES_KEY, mImages); } @Override public void onDestroy() { super.onDestroy(); mThumbs.destroy(); } ///////////////////////////////////////////////////// // HELPERS ///////////////////////////////////////////////////// protected void setImages(ArrayList<Image> images) { mImages = new ArrayList<Image>(images); if (mThumbs != null) { mThumbs.setThumbs(mImages, false); } } protected float navigationHeight() { int actionBarHeight = getResources().getDimensionPixelSize( com.actionbarsherlock.R.dimen.abs__action_bar_default_height); int bottomBarHeight = getResources().getDimensionPixelSize( R.dimen.guide_create_step_edit_bottom_bar_height); int stepPagerBar = getActivity().getResources().getDimensionPixelSize(R.dimen.step_pager_bar_height); return actionBarHeight + bottomBarHeight + stepPagerBar; } }