diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java index cf078e16..cc7c2cc5 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java @@ -310,6 +310,9 @@ public class ImageViewerController extends Controller implements View.OnClickLis endAnimation = new AnimatorSet(); if (!setTransitionViewData(startImage) || bitmap == null) { + if (bitmap != null) { + previewImage.setBitmap(bitmap); + } ValueAnimator backgroundAlpha = ValueAnimator.ofFloat(1f, 0f); backgroundAlpha.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java index 102e1151..7e50c0c4 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java @@ -17,11 +17,13 @@ import android.widget.TextView; import org.floens.chan.R; import org.floens.chan.controller.Controller; import org.floens.chan.core.model.Post; +import org.floens.chan.core.model.PostImage; import org.floens.chan.core.presenter.ThreadPresenter; import org.floens.chan.core.settings.ChanSettings; import org.floens.chan.ui.helper.PostPopupHelper; import org.floens.chan.ui.view.LoadView; import org.floens.chan.ui.view.PostView; +import org.floens.chan.ui.view.ThumbnailView; import org.floens.chan.utils.ThemeHelper; public class PostRepliesController extends Controller { @@ -34,6 +36,7 @@ public class PostRepliesController extends Controller { private boolean first = true; private LoadView loadView; + private ListView listView; public PostRepliesController(Context context, PostPopupHelper postPopupHelper, ThreadPresenter presenter) { super(context); @@ -75,6 +78,26 @@ public class PostRepliesController extends Controller { } } + public ThumbnailView getThumbnail(PostImage postImage) { + if (listView == null) { + return null; + } else { + ThumbnailView thumbnail = null; + for (int i = 0; i < listView.getChildCount(); i++) { + View view = listView.getChildAt(i); + if (view instanceof PostView) { + PostView postView = (PostView) view; + Post post = postView.getPost(); + if (post.hasImage && post.imageUrl.equals(postImage.imageUrl)) { + thumbnail = postView.getThumbnail(); + break; + } + } + } + return thumbnail; + } + } + public void setPostRepliesData(PostPopupHelper.RepliesData data) { displayData(data); } @@ -87,7 +110,7 @@ public class PostRepliesController extends Controller { dataView = inflateRes(R.layout.post_replies); } - ListView listView = (ListView) dataView.findViewById(R.id.post_list); + listView = (ListView) dataView.findViewById(R.id.post_list); View repliesBack = dataView.findViewById(R.id.replies_back); repliesBack.setOnClickListener(new View.OnClickListener() { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/helper/PostPopupHelper.java b/Clover/app/src/main/java/org/floens/chan/ui/helper/PostPopupHelper.java index 09af0a6e..7b704fe6 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/helper/PostPopupHelper.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/helper/PostPopupHelper.java @@ -21,8 +21,10 @@ import android.content.Context; import org.floens.chan.controller.Controller; import org.floens.chan.core.model.Post; +import org.floens.chan.core.model.PostImage; import org.floens.chan.core.presenter.ThreadPresenter; import org.floens.chan.ui.controller.PostRepliesController; +import org.floens.chan.ui.view.ThumbnailView; import java.util.ArrayList; import java.util.List; @@ -69,6 +71,14 @@ public class PostPopupHelper { dismiss(); } + public boolean isOpen() { + return presentingController != null && presentingController.alive; + } + + public ThumbnailView getThumbnail(PostImage postImage) { + return presentingController.getThumbnail(postImage); + } + public void postClicked(Post p) { popAll(); presenter.highlightPost(p.no); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java index 4cbe6d8d..2c9ee747 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java @@ -176,7 +176,11 @@ public class ThreadLayout extends LoadView implements ThreadPresenter.ThreadPres } public ThumbnailView getThumbnail(PostImage postImage) { - return threadListLayout.getThumbnail(postImage); + if (postPopupHelper.isOpen()) { + return postPopupHelper.getThumbnail(postImage); + } else { + return threadListLayout.getThumbnail(postImage); + } } private void switchVisible(boolean visible) { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/TransitionImageView.java b/Clover/app/src/main/java/org/floens/chan/ui/view/TransitionImageView.java index 436fde62..f32eaee8 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/TransitionImageView.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/view/TransitionImageView.java @@ -43,6 +43,30 @@ public class TransitionImageView extends View { init(); } + public void setBitmap(Bitmap bitmap) { + this.bitmap = bitmap; + bitmapRect.set(0, 0, bitmap.getWidth(), bitmap.getHeight()); + + // Center inside method + float selfWidth = getWidth(); + float selfHeight = getHeight(); + + float destScale = Math.min( + selfWidth / (float) bitmap.getWidth(), + selfHeight / (float) bitmap.getHeight()); + + RectF output = new RectF( + (selfWidth - bitmap.getWidth() * destScale) * 0.5f, + (selfHeight - bitmap.getHeight() * destScale) * 0.5f, 0, 0); + + output.right = bitmap.getWidth() * destScale + output.left; + output.bottom = bitmap.getHeight() * destScale + output.top; + + destRect.set(output); + + matrix.setRectToRect(bitmapRect, destRect, Matrix.ScaleToFit.FILL); + } + public void setSourceImageView(Point windowLocation, Point viewSize, Bitmap bitmap) { this.bitmap = bitmap; bitmapRect.set(0, 0, bitmap.getWidth(), bitmap.getHeight());