package com.ptrprograms.gallery.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.ptrprograms.gallery.R; import com.ptrprograms.gallery.model.Image; import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; public class ImageFragment extends Fragment { public final static String EXTRA_IMAGE = "image"; private final static String CAPTION_STATE = "caption_state"; private ProgressBar mProgress; private ImageView mImageView; private TextView mCaption; private Image mImage; public static ImageFragment newInstance( Image image ) { ImageFragment f = new ImageFragment(); Bundle args = new Bundle(); args.putParcelable( EXTRA_IMAGE, image ); f.setArguments(args); return f; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate( R.layout.fragment_image_detail, container, false ); return view; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if( mCaption == null ) return; outState.putInt( CAPTION_STATE, mCaption.getVisibility() ); } @Override public void onViewStateRestored(Bundle savedInstanceState) { super.onViewStateRestored(savedInstanceState); if( mCaption == null || savedInstanceState == null ) return; mCaption.setVisibility( savedInstanceState.getInt( CAPTION_STATE, View.VISIBLE )); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { mProgress = (ProgressBar) view.findViewById( R.id.progress ); mImageView = ( ImageView ) view.findViewById( R.id.fragment_image_detail_image ); mImageView.setVisibility( View.GONE ); mCaption = ( TextView ) view.findViewById( R.id.fragment_image_detail_caption ); mCaption.setVisibility( View.GONE ); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mImage = getArguments().getParcelable( EXTRA_IMAGE ); if( mImage == null ) return; loadImage( mImage.getLargeImage() ); loadCaption( mImage.getCaption() ); } private void loadImage( String url ) { if( TextUtils.isEmpty( url ) || mImageView == null ) return; Picasso.with( getActivity() ).load( url ).into( mImageView, new Callback() { @Override public void onSuccess() { mImageView.setVisibility( View.VISIBLE ); mProgress.setVisibility( View.GONE ); mImageView.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { if( mCaption.getVisibility() == View.GONE && !TextUtils.isEmpty( mCaption.getText() ) ) mCaption.setVisibility( View.VISIBLE ); else mCaption.setVisibility( View.GONE ); } }); } @Override public void onError() { } }); } private void loadCaption( String caption ) { if( TextUtils.isEmpty( caption ) || mCaption == null ) return; mCaption.setText( caption ); mCaption.setVisibility( View.VISIBLE ); } @Override public void onDestroy() { super.onDestroy(); Picasso.with( getActivity() ).cancelRequest( mImageView ); } }