package com.photo.photogallery.photodetail; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import com.photo.photogallery.PhotoGalleryApp; import com.photo.photogallery.R; import com.photo.photogallery.api.entities.Info; import com.photo.photogallery.api.entities.Photo; import com.photo.photogallery.network.AppImageLoader; import com.photo.photogallery.other.Utils; import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import de.hdodenhof.circleimageview.CircleImageView; import static android.view.View.GONE; import static android.view.View.VISIBLE; public class PhotoDetailFragment extends Fragment implements PhotoDetailView, View.OnClickListener { @NonNull private static final String ARGUMENT_PHOTO = "PHOTO"; private static Photo mPhoto; private static Info mInfo; @BindView(R.id.photo_loading_ui) View loadingUiView; @BindView(R.id.photo_loading_error_ui) View errorUiView; @BindView(R.id.photo_content_ui) RelativeLayout contentUiView; @BindView(R.id.photo_image_view) ImageView photoImageView; @BindView(R.id.photo_icon_image_view) CircleImageView ownerImageView; @BindView(R.id.photo_owner_name_text_view) TextView ownerNameTextView; @BindView(R.id.photo_title_text_view) TextView titleTextView; @BindView(R.id.photo_date_text_view) TextView dateTextView; @BindView(R.id.photo_description_text_view) TextView descriptionTextView; @BindView(R.id.photo_location_image_view) ImageView locationIconImageView; @BindView(R.id.photo_location_text_view) TextView locationTextView; @Inject AppImageLoader imageLoader; @Inject PhotoDetailPresenter photoDetailPresenter; @NonNull private Unbinder unbinder; public PhotoDetailFragment() { } public static PhotoDetailFragment newInstance(@NonNull Photo photo) { Bundle arguments = new Bundle(); arguments.putParcelable(ARGUMENT_PHOTO, photo); PhotoDetailFragment fragment = new PhotoDetailFragment(); fragment.setArguments(arguments); return fragment; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPhoto = getArguments().getParcelable(ARGUMENT_PHOTO); PhotoGalleryApp.get(getContext()).applicationComponent() .plus(new PhotoDetailModule(mPhoto.id(), this)) .inject(this); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_photo_detail, container, false); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { unbinder = ButterKnife.bind(this, view); } @Override public void setPresenter(PhotoDetailPresenter photoDetailPresenter) { this.photoDetailPresenter = photoDetailPresenter; } @Override public void onResume() { super.onResume(); photoDetailPresenter.subscribe(); } @Override public void onPause() { super.onPause(); photoDetailPresenter.unsubscribe(); } @Override public void showLoadingUi() { errorUiView.setVisibility(GONE); loadingUiView.setVisibility(VISIBLE); contentUiView.setVisibility(GONE); } @Override public void showErrorUi(@NonNull Throwable error) { loadingUiView.setVisibility(GONE); errorUiView.setVisibility(VISIBLE); contentUiView.setVisibility(GONE); } @Override public void showContentUi(@NonNull Info info) { loadingUiView.setVisibility(GONE); errorUiView.setVisibility(GONE); contentUiView.setVisibility(VISIBLE); mInfo = info; DisplayMetrics displayMetrics = Utils.getDisplayMetrics(getActivity()); imageLoader.downloadInto(Utils.getImageUrl(mPhoto, displayMetrics.heightPixels), photoImageView); imageLoader.downloadInto(Utils.getBuddyIconUrl(mPhoto), ownerImageView); ownerNameTextView.setText(mPhoto.ownerName()); titleTextView.setText(Utils.getShortTitle(mPhoto.title())); dateTextView.setText(Utils.getDateTaken(mPhoto.dateTaken())); if (info.photoInfo().description().content() != null) { descriptionTextView.setText(info.photoInfo().description().content()); } if (info.photoInfo().location() != null) { locationIconImageView.setVisibility(VISIBLE); try { locationTextView.setText(info.photoInfo().location().locality().content()); } catch (NullPointerException e) { locationTextView.setVisibility(GONE); } } photoImageView.setOnClickListener(this); } @Override public void onClick(View view) { FragmentManager fragmentManager = getFragmentManager(); DialogFragment newFragment = PhotoFullDialog.newInstance(mPhoto, mInfo); newFragment.show(fragmentManager, "photo_full_dialog"); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); } @Override public void onDestroyView() { if (unbinder != null) { unbinder.unbind(); } super.onDestroyView(); } }