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.text.Html; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.dozuki.ifixit.App; import com.dozuki.ifixit.R; import com.dozuki.ifixit.model.Image; import com.dozuki.ifixit.util.transformations.RoundedTransformation; import com.dozuki.ifixit.ui.TouchableRelativeLayout; import com.dozuki.ifixit.ui.guide.view.GuideViewActivity; import com.dozuki.ifixit.util.ImageSizes; import com.dozuki.ifixit.util.PicassoUtils; import com.dozuki.ifixit.util.api.Api; import com.dozuki.ifixit.util.api.ApiCall; import com.dozuki.ifixit.util.api.GuideMediaProgress; import com.f2prateek.progressbutton.ProgressButton; import com.squareup.picasso.Picasso; import com.squareup.picasso.Transformation; public class OfflineGuideListItem extends TouchableRelativeLayout implements View.OnClickListener { private TextView mTitleView; private ProgressButton mProgressButton; private ImageView mThumbnail; private Activity mActivity; private GuideMediaProgress mGuideMedia; public OfflineGuideListItem(Activity activity) { super(activity); mActivity = activity; LayoutInflater inflater = (LayoutInflater)activity.getSystemService( Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.offline_guide_item, this, true); mTitleView = (TextView)findViewById(R.id.offline_guide_title); mProgressButton = (ProgressButton)findViewById(R.id.offline_guide_progress_button); mThumbnail = (ImageView)findViewById(R.id.offline_guide_thumbnail); mProgressButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { App.sendEvent("ui_action", "button_press", "offline_guides_unfavorite_click", null); AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); builder .setTitle(R.string.unfavorite_guide) .setMessage(R.string.unfavorite_confirmation) .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Api.call(mActivity, ApiCall.favoriteGuide( mGuideMedia.mGuideInfo.mGuideid, false)); dialog.dismiss(); } }) .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }) .setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { mProgressButton.setPinned(true); mProgressButton.invalidate(); } }) .setCancelable(true); AlertDialog dialog = builder.create(); dialog.show(); } }); setOnClickListener(this); } public void setRowData(GuideMediaProgress guideMedia, boolean displayLiveImages, boolean isSyncing) { mGuideMedia = guideMedia; mTitleView.setText(mGuideMedia.mGuideInfo.mTitle); mProgressButton.setPinned(true); mProgressButton.setCircleColor(getResources().getColor( R.color.progress_button_background)); int progressColor = isSyncing || mGuideMedia.isComplete() ? R.color.emphasis : R.color.progress_button_progress_disabled; mProgressButton.setProgressColor(getResources().getColor(progressColor)); if (mGuideMedia.mTotalMedia == 0) { // It's valid for guides to have no images whatsoever so we must pretend that // it has 1 out of 1 images downloaded so ProgressButton doesn't crash on a // max value of 0. mProgressButton.setProgressAndMax(1, 1); } else { mProgressButton.setProgressAndMax(mGuideMedia.mMediaProgress, mGuideMedia.mTotalMedia); } Picasso picasso = PicassoUtils.with(mActivity); Transformation transform = new RoundedTransformation(4, 0); Image image = mGuideMedia.mGuideInfo.mImage; if (image != null) { PicassoUtils.displayImage(picasso, image.getPath(ImageSizes.guideList), !displayLiveImages) .noFade() .fit() .transform(transform) .error(R.drawable.no_image) .into(mThumbnail); } else { picasso .load(R.drawable.no_image) .noFade() .fit() .transform(transform) .into(mThumbnail); } } @Override public void onClick(View view) { mActivity.startActivity(GuideViewActivity.viewGuideid(mActivity, mGuideMedia.mGuideInfo.mGuideid)); } }