From 42197b5b5caf040ed1ee48a5f1a43d84b375987b Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Tue, 11 Dec 2018 15:23:30 -0200
Subject: [PATCH] [android] Fix enter transition to fullscreen ImageActivity

---
 .../briar/android/conversation/ImageActivity.java    |  9 +++++++--
 .../briar/android/conversation/ImageFragment.java    | 12 +++++++++---
 .../briar/android/conversation/ImageViewHolder.java  |  4 ++++
 3 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageActivity.java
index 811bf11e38..f7da8d5c3c 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageActivity.java
@@ -82,7 +82,7 @@ public class ImageActivity extends BriarActivity
 		super.onCreate(state);
 
 		// Transitions
-		supportPostponeEnterTransition();
+		if (state == null) supportPostponeEnterTransition();
 		Window window = getWindow();
 		if (SDK_INT >= 21) {
 			Transition transition = new Fade();
@@ -298,13 +298,18 @@ public class ImageActivity extends BriarActivity
 
 	private class ImagePagerAdapter extends FragmentStatePagerAdapter {
 
+		private boolean isFirst = true;
+
 		private ImagePagerAdapter(FragmentManager fm) {
 			super(fm);
 		}
 
 		@Override
 		public Fragment getItem(int position) {
-			return ImageFragment.newInstance(attachments.get(position));
+			Fragment f = ImageFragment
+					.newInstance(attachments.get(position), isFirst);
+			isFirst = false;
+			return f;
 		}
 
 		@Override
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageFragment.java
index bf7ff57915..6ab0d0b041 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageFragment.java
@@ -35,17 +35,21 @@ import static org.briarproject.briar.android.conversation.ImageActivity.ATTACHME
 @ParametersAreNonnullByDefault
 public class ImageFragment extends Fragment {
 
+	private final static String IS_FIRST = "isFirst";
+
 	@Inject
 	ViewModelProvider.Factory viewModelFactory;
 
 	private AttachmentItem attachment;
+	private boolean isFirst;
 	private ImageViewModel viewModel;
 	private PhotoView photoView;
 
-	static ImageFragment newInstance(AttachmentItem a) {
+	static ImageFragment newInstance(AttachmentItem a, boolean isFirst) {
 		ImageFragment f = new ImageFragment();
 		Bundle args = new Bundle();
 		args.putParcelable(ATTACHMENT_POSITION, a);
+		args.putBoolean(IS_FIRST, isFirst);
 		f.setArguments(args);
 		return f;
 	}
@@ -63,6 +67,7 @@ public class ImageFragment extends Fragment {
 
 		Bundle args = requireNonNull(getArguments());
 		attachment = requireNonNull(args.getParcelable(ATTACHMENT_POSITION));
+		isFirst = args.getBoolean(IS_FIRST);
 	}
 
 	@Nullable
@@ -86,7 +91,7 @@ public class ImageFragment extends Fragment {
 			public boolean onLoadFailed(@Nullable GlideException e,
 					Object model, Target<Drawable> target,
 					boolean isFirstResource) {
-				if (getActivity() != null)
+				if (getActivity() != null && isFirst)
 					getActivity().supportStartPostponedEnterTransition();
 				return false;
 			}
@@ -105,8 +110,9 @@ public class ImageFragment extends Fragment {
 				if (viewModel.isOverlappingToolbar(photoView, resource)) {
 					photoView.setScaleType(FIT_START);
 				}
-				if (getActivity() != null)
+				if (getActivity() != null && isFirst) {
 					getActivity().supportStartPostponedEnterTransition();
+				}
 				return false;
 			}
 		};
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewHolder.java
index 301fa3c13f..f76e3c2ec6 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewHolder.java
@@ -15,6 +15,7 @@ import org.briarproject.briar.android.conversation.glide.BriarImageTransformatio
 import org.briarproject.briar.android.conversation.glide.GlideApp;
 import org.briarproject.briar.android.conversation.glide.Radii;
 
+import static android.os.Build.VERSION.SDK_INT;
 import static com.bumptech.glide.load.engine.DiskCacheStrategy.NONE;
 import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade;
 
@@ -42,6 +43,9 @@ class ImageViewHolder extends ViewHolder {
 		} else {
 			setImageViewDimensions(attachment, single, needsStretch);
 			loadImage(attachment, r);
+			if (SDK_INT >= 21) {
+				imageView.setTransitionName(attachment.getTransitionName());
+			}
 		}
 	}
 
-- 
GitLab