package com.dozuki.ifixit.ui.guide.create; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.os.Build; import android.text.Html; import android.view.LayoutInflater; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.PopupMenu; import android.widget.TextView; import com.dozuki.ifixit.App; import com.dozuki.ifixit.R; import com.dozuki.ifixit.model.Image; import com.dozuki.ifixit.model.VideoThumbnail; import com.dozuki.ifixit.model.guide.GuideStep; import com.dozuki.ifixit.ui.TouchableRelativeLayout; import com.dozuki.ifixit.util.ImageSizes; import com.dozuki.ifixit.util.PicassoUtils; import com.google.analytics.tracking.android.MapBuilder; import com.squareup.picasso.Picasso; import java.util.ArrayList; public class StepListItem extends TouchableRelativeLayout { private static final int EDIT_OPTION = 0; private static final int DELETE_OPTION = 1; private TextView mStepsView; private TextView mStepNumber; private ImageView mImageView; private Context mContext; private StepPortalFragment mPortalRef; private GuideStep mStepObject; private int mStepPosition; public StepListItem(Context context, final StepPortalFragment portalRef) { super(context); mContext = context; mPortalRef = portalRef; LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.guide_create_step_list_item, this, true); mStepsView = (TextView) findViewById(R.id.step_line_text_view); mStepNumber = (TextView) findViewById(R.id.guide_create_step_item_number); mImageView = (ImageView) findViewById(R.id.guide_step_item_thumbnail); setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { editStep(); } }); final View menuButton = findViewById(R.id.step_item_menu_button); menuButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { PopupMenu itemMenu = new PopupMenu(mContext, menuButton); itemMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.step_create_item_edit: editStep(); break; case R.id.step_create_item_delete: deleteStep(); break; } return true; } }); MenuInflater menuInflater = itemMenu.getMenuInflater(); menuInflater.inflate(R.menu.step_item_popup, itemMenu.getMenu()); itemMenu.show(); } else { // PopupMenu was added in API 11, so let's use an AlertDialog instead. AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setItems(R.array.step_list_item_options, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { switch (which) { case EDIT_OPTION: editStep(); break; case DELETE_OPTION: deleteStep(); break; } } }); builder.show(); } } }); } private void deleteStep() { App.sendEvent("ui_action", "button_press", "delete_step", null); mPortalRef.createDeleteDialog(mStepObject).show(); } public void setRowData(GuideStep step, int position) { mStepObject = step; mStepPosition = position; String stepText = App.get().getString(R.string.step_number, mStepPosition + 1); if (mStepObject.getTitle().equals("")) { mStepsView.setText(stepText); mStepNumber.setVisibility(View.GONE); } else { mStepsView.setText(Html.fromHtml(mStepObject.getTitle())); mStepNumber.setText(stepText); mStepNumber.setVisibility(View.VISIBLE); } if (mStepObject.hasVideo()) { setStepThumbnail(mStepObject.getVideo().getThumbnail(), mImageView); } else { setStepThumbnail(mStepObject.getImages(), mImageView); } } private void editStep() { App.sendEvent("ui_action", "button_press", "edit_step", null); mPortalRef.launchStepEdit(mStepPosition); } private void setStepThumbnail(ArrayList<Image> imageList, ImageView imageView) { if (imageList.size() == 0) { PicassoUtils .with(mContext) .load(R.drawable.no_image) .noFade() .into(imageView); } else { for (Image imageInfo : imageList) { if (imageInfo.getId() > 0) { String url = imageInfo.getPath(ImageSizes.stepList); setStepThumbnail(url, imageView); return; } } } } private void setStepThumbnail(VideoThumbnail thumb, ImageView imageView) { String url = thumb.getPath(ImageSizes.stepList); // Videos are not guaranteed to be 4:3 ratio, so let's fake it. imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); setStepThumbnail(url, imageView); } private void setStepThumbnail(String url, ImageView imageView) { imageView.setTag(url); PicassoUtils .with(mContext) .load(url) .noFade() .error(R.drawable.no_image) .into(imageView); imageView.invalidate(); } }