From bb0a2a5b323a7ab6841777ccb255d4cc0a409f5f Mon Sep 17 00:00:00 2001 From: Torsten Grote <t@grobox.de> Date: Thu, 1 Sep 2016 18:22:06 -0300 Subject: [PATCH] Add a scene transition animation when reblogging a blog post --- ..._reblog_dialog.xml => fragment_reblog.xml} | 12 +++--- .../android/blogs/BlogPostViewHolder.java | 43 ++++++++++++------- .../android/blogs/ReblogActivity.java | 19 ++++++++ .../android/blogs/ReblogFragment.java | 6 +-- 4 files changed, 55 insertions(+), 25 deletions(-) rename briar-android/res/layout/{fragment_reblog_dialog.xml => fragment_reblog.xml} (100%) diff --git a/briar-android/res/layout/fragment_reblog_dialog.xml b/briar-android/res/layout/fragment_reblog.xml similarity index 100% rename from briar-android/res/layout/fragment_reblog_dialog.xml rename to briar-android/res/layout/fragment_reblog.xml index 28b59e7b9f..b17143b351 100644 --- a/briar-android/res/layout/fragment_reblog_dialog.xml +++ b/briar-android/res/layout/fragment_reblog.xml @@ -11,6 +11,12 @@ android:layout_height="wrap_content" android:padding="@dimen/margin_small"> + <include + android:id="@+id/postLayout" + layout="@layout/list_item_blog_post" + android:layout_width="match_parent" + android:layout_height="wrap_content"/> + <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleLarge" @@ -18,12 +24,6 @@ android:layout_height="wrap_content" android:layout_centerInParent="true"/> - <include - android:id="@+id/postLayout" - layout="@layout/list_item_blog_post" - android:layout_width="match_parent" - android:layout_height="wrap_content"/> - <EditText android:id="@+id/inputText" android:layout_width="match_parent" diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java b/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java index 535c85e260..71fff22031 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java @@ -1,9 +1,11 @@ package org.briarproject.android.blogs; +import android.app.Activity; import android.content.Context; import android.content.Intent; +import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityOptionsCompat; -import android.support.v4.content.ContextCompat; +import android.support.v4.view.ViewCompat; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -17,8 +19,9 @@ import org.briarproject.android.util.AuthorView; import org.briarproject.api.blogs.BlogCommentHeader; import org.briarproject.api.blogs.BlogPostHeader; import org.briarproject.api.identity.Author; +import org.briarproject.api.sync.MessageId; -import static android.support.v4.app.ActivityOptionsCompat.makeCustomAnimation; +import static android.support.v4.app.ActivityOptionsCompat.makeSceneTransitionAnimation; import static android.view.View.GONE; import static android.view.View.VISIBLE; import static org.briarproject.android.BriarActivity.GROUP_ID; @@ -62,7 +65,25 @@ public class BlogPostViewHolder extends RecyclerView.ViewHolder { reblogButton.setVisibility(GONE); } + void setTransitionName(MessageId id) { + ViewCompat.setTransitionName(layout, getTransitionName(id)); + } + + private String getTransitionName(MessageId id) { + return "blogPost" + id.hashCode(); + } + void bindItem(final BlogPostItem item) { + setTransitionName(item.getId()); + layout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null) { + listener.onBlogPostClick(item); + } + } + }); + // author and date BlogPostHeader post = item.getPostHeader(); Author a = post.getAuthor(); @@ -86,11 +107,12 @@ public class BlogPostViewHolder extends RecyclerView.ViewHolder { Intent i = new Intent(ctx, ReblogActivity.class); i.putExtra(GROUP_ID, item.getGroupId().getBytes()); i.putExtra(POST_ID, item.getId().getBytes()); + ActivityOptionsCompat options = - makeCustomAnimation(ctx, android.R.anim.slide_in_left, - android.R.anim.slide_out_right); - Intent[] intents = { i }; - ContextCompat.startActivities(ctx, intents, options.toBundle()); + makeSceneTransitionAnimation((Activity) ctx, layout, + getTransitionName(item.getId())); + ActivityCompat + .startActivity((Activity) ctx, i, options.toBundle()); } }); @@ -101,15 +123,6 @@ public class BlogPostViewHolder extends RecyclerView.ViewHolder { } else { reblogger.setVisibility(GONE); } - - layout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (listener != null) { - listener.onBlogPostClick(item); - } - } - }); } private void onBindComment(final BlogCommentItem item) { diff --git a/briar-android/src/org/briarproject/android/blogs/ReblogActivity.java b/briar-android/src/org/briarproject/android/blogs/ReblogActivity.java index 9aade027de..1df967c619 100644 --- a/briar-android/src/org/briarproject/android/blogs/ReblogActivity.java +++ b/briar-android/src/org/briarproject/android/blogs/ReblogActivity.java @@ -1,7 +1,10 @@ package org.briarproject.android.blogs; +import android.annotation.TargetApi; import android.content.Intent; import android.os.Bundle; +import android.transition.Fade; +import android.transition.Transition; import android.view.MenuItem; import org.briarproject.R; @@ -11,6 +14,8 @@ import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener; import org.briarproject.api.sync.GroupId; import org.briarproject.api.sync.MessageId; +import static android.os.Build.VERSION.SDK_INT; +import static android.os.Build.VERSION_CODES.LOLLIPOP; import static org.briarproject.android.blogs.BlogActivity.POST_ID; public class ReblogActivity extends BriarActivity implements @@ -20,6 +25,10 @@ public class ReblogActivity extends BriarActivity implements public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (SDK_INT >= LOLLIPOP) { + setTransition(); + } + Intent intent = getIntent(); byte[] groupId = intent.getByteArrayExtra(GROUP_ID); if (groupId == null) @@ -70,4 +79,14 @@ public class ReblogActivity extends BriarActivity implements public void onFragmentCreated(String tag) { } + + @TargetApi(LOLLIPOP) + private void setTransition() { + Transition fade = new Fade(); + fade.excludeTarget(android.R.id.statusBarBackground, true); + fade.excludeTarget(R.id.action_bar_container, true); + fade.excludeTarget(android.R.id.navigationBarBackground, true); + getWindow().setExitTransition(fade); + getWindow().setEnterTransition(fade); + } } diff --git a/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java b/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java index 367dd7041a..119290bb23 100644 --- a/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java @@ -85,9 +85,10 @@ public class ReblogFragment extends BaseFragment { blogId = new GroupId(args.getByteArray(GROUP_ID)); postId = new MessageId(args.getByteArray(POST_ID)); - View v = inflater.inflate(R.layout.fragment_reblog_dialog, container, + View v = inflater.inflate(R.layout.fragment_reblog, container, false); ui = new ViewHolder(v); + ui.post.setTransitionName(postId); showProgressBar(); return v; @@ -137,7 +138,6 @@ public class ReblogFragment extends BaseFragment { ui.scrollView.post(new Runnable() { @Override public void run() { - //ui.scrollView.scrollTo(0, ui.scrollView.getBottom()); ui.scrollView.fullScroll(FOCUS_DOWN); } }); @@ -166,14 +166,12 @@ public class ReblogFragment extends BaseFragment { private void showProgressBar() { ui.progressBar.setVisibility(VISIBLE); - ui.post.setVisibility(GONE); ui.input.setVisibility(GONE); ui.publish.setVisibility(GONE); } private void hideProgressBar() { ui.progressBar.setVisibility(INVISIBLE); - ui.post.setVisibility(VISIBLE); ui.input.setVisibility(VISIBLE); ui.publish.setVisibility(VISIBLE); } -- GitLab