package de.jeisfeld.augendiagnoselib.util; import android.app.Activity; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.View; import java.util.List; import de.jeisfeld.augendiagnoselib.activities.DisplayOneActivity; import de.jeisfeld.augendiagnoselib.activities.DisplayTwoActivity; import de.jeisfeld.augendiagnoselib.activities.ListFoldersForDisplayActivity; import de.jeisfeld.augendiagnoselib.activities.ListPicturesForNameActivity; import de.jeisfeld.augendiagnoselib.activities.ListPicturesForSecondNameActivity; import de.jeisfeld.augendiagnoselib.components.EyeImageView; import de.jeisfeld.augendiagnoselib.fragments.ListPicturesForNameFragment; import de.jeisfeld.augendiagnoselib.util.imagefile.EyePhoto; /** * A class handling the selection of up to two pictures for display, and the display of these pictures. */ public final class ImageSelectionAndDisplayHandler extends BaseImageSelectionHandler { /** * The activity for first selection. */ @Nullable private Activity mActivity = null; /** * The activity for second selection. */ @Nullable private ListPicturesForSecondNameActivity mSecondActivity = null; /** * The fragment for first selection. */ @Nullable private ListPicturesForNameFragment mFragment = null; /** * An instance of the ImageSelectionAndDisplayHandler - as singleton. */ @Nullable private static volatile ImageSelectionAndDisplayHandler mSingleton; /** * Get an instance of the handler - it is handled as singleton. * * @return an instance of this class (as singleton). */ @Nullable public static ImageSelectionAndDisplayHandler getInstance() { if (mSingleton == null) { mSingleton = new ImageSelectionAndDisplayHandler(); } return mSingleton; } /** * Hide default constructor, to ensure singleton use. */ private ImageSelectionAndDisplayHandler() { // default constructor } /** * Set the activity for first selection (mobile design). * * @param activity The activity to be set. */ public void setActivity(@NonNull final ListPicturesForNameActivity activity) { this.mActivity = activity; this.mFragment = activity.getListPicturesForNameFragment(); } /** * Set the activity for first selection (tablet design). * * @param activity The activity to be set. */ public void setActivity(final ListFoldersForDisplayActivity activity) { this.mActivity = activity; this.mFragment = null; } /** * Set the activity for second selection. * * @param secondActivity The activity to be set. */ public void setSecondActivity(final ListPicturesForSecondNameActivity secondActivity) { this.mSecondActivity = secondActivity; } /** * Clean all references. */ public static void clean() { mSingleton = null; } /** * Prepare an EyeImageView for selection of the first picture. * * @param view The view to be prepared. */ public void prepareViewForFirstSelection(@NonNull final EyeImageView view) { // Ensure that selected view stays selected after rotating device if (getSelectedImage() != null && getSelectedImage().equals(view.getEyePhoto())) { selectView(view); } view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { if (mActivity == null) { // Prevent NullPointerException return; } if (!hasSelectedView()) { DisplayOneActivity.startActivity(mActivity, view.getEyePhoto().getAbsolutePath()); } else if (isSelectedView(view)) { cleanSelectedViews(); DisplayOneActivity.startActivity(mActivity, view.getEyePhoto().getAbsolutePath()); } else { DisplayTwoActivity.startActivity(mActivity, getSelectedImage().getAbsolutePath(), view.getEyePhoto() .getAbsolutePath(), false); cleanSelectedViews(); } } }); view.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(final View v) { if (isSelectedView(view)) { cleanSelectedViews(); } else { cleanSelectedViews(); selectView(view); } return true; } }); } /** * Prepare an EyeImageView for selection of the second picture. * * @param view The view to be prepared. */ public void prepareViewForSecondSelection(@NonNull final EyeImageView view) { view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { DisplayTwoActivity .startActivity(mActivity, getSelectedImage().getAbsolutePath(), view.getEyePhoto() .getAbsolutePath(), false); cleanSelectedViews(); mSecondActivity.finish(); } }); } /** * Unselect the selected view. */ @Override public void cleanSelectedViews() { if (hasSelectedView()) { super.cleanSelectedViews(); if (mFragment != null) { mFragment.deactivateButtonAdditionalPictures(); } } } /** * Select a specific view. * * @param view the view to be selected. */ @Override protected void selectView(final EyeImageView view) { super.selectView(view); if (mFragment != null) { mFragment.activateButtonAdditionalPictures(); } } /** * Get the first selected eye photo, if existing. * * @return The selected eye photo. */ private EyePhoto getSelectedImage() { List<EyePhoto> selectedImages = getSelectedImages(); if (selectedImages.size() == 0) { return null; } else { return selectedImages.get(0); } } }