package com.markupartist.iglaset.activity; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.view.View; import android.view.Window; import android.widget.ImageView; import android.widget.ProgressBar; import com.markupartist.iglaset.R; import com.markupartist.iglaset.provider.Drink; import com.google.android.imageloader.ImageLoader; import com.google.android.imageloader.ImageLoader.BindResult; /** * @author marco * */ public class DrinkImageViewerDialog extends Dialog implements ImageLoader.Callback, View.OnClickListener { private ImageView imageView; private ProgressBar progressBar; private Drink drink; /** * DrinkImageViewerDialog constructor. Creates the dialog and starts downloading * the specified image. Note that the dialog is not shown automatically. * @param context Dialog context. * @param drink Drink containing the image to show. If the image is not null then * the dialog will try to show the drink's largest available image. If that image * is not available on the server or if there is a network connection issue then an * error will be shown, allowing the user to retry or abort. * * \see load */ public DrinkImageViewerDialog(Context context, Drink drink) { super(context); this.drink = drink; setCanceledOnTouchOutside(true); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.article_image_view); imageView = (ImageView) findViewById(R.id.drink_image); imageView.setOnClickListener(this); progressBar = (ProgressBar) findViewById(R.id.progress_bar); } /** * Attach drink to dialog. Note that this will not download the image. It has to * be explicitly downloaded via DrinkImageViewerDialog.load * @param drink Drink to attach to the image viewer. */ public void setDrink(Drink drink) { this.drink = drink; } /** * Download the drink's largest image if a drink has been attached to this dialog. */ public void load() { if(null != drink) { BindResult result = ImageLoader.get(getContext()).bind(imageView, drink.getLargestImageUrl(), this); if(result == ImageLoader.BindResult.LOADING) { progressBar.setVisibility(ProgressBar.VISIBLE); imageView.setVisibility(ImageView.GONE); } } } @Override public void onClick(View v) { dismiss(); } @Override public void onImageLoaded(ImageView view, String url) { progressBar.setVisibility(ProgressBar.GONE); imageView.setVisibility(ImageView.VISIBLE); } @Override public void onImageError(ImageView view, String url, Throwable error) { OnClickListener onClickListener = new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch(which) { case Dialog.BUTTON_POSITIVE: show(); load(); break; case Dialog.BUTTON_NEGATIVE: dismiss(); break; } } }; hide(); DialogFactory.createNetworkProblemDialog(getContext(), onClickListener).show(); } }