From 7c5945de01c17accfa84af688e3b6c7cbbd084c2 Mon Sep 17 00:00:00 2001 From: Torsten Grote <t@grobox.de> Date: Wed, 7 Sep 2016 16:50:43 -0300 Subject: [PATCH] Check if activity is still alive before returning results to it --- .../org/briarproject/android/Destroyable.java | 2 +- .../android/blogs/BlogFragment.java | 9 ++++----- .../android/blogs/BlogPostFragment.java | 2 +- .../android/blogs/BlogPostPagerFragment.java | 4 ++-- .../android/blogs/FeedFragment.java | 4 ++-- .../android/blogs/FeedPostFragment.java | 2 +- .../android/blogs/FeedPostPagerFragment.java | 4 ++-- .../android/blogs/ReblogFragment.java | 4 ++-- .../handler/UiResultExceptionHandler.java | 19 +++++++++++-------- .../controller/handler/UiResultHandler.java | 14 ++++++++------ .../android/fragment/BaseFragment.java | 3 ++- 11 files changed, 36 insertions(+), 31 deletions(-) diff --git a/briar-android/src/org/briarproject/android/Destroyable.java b/briar-android/src/org/briarproject/android/Destroyable.java index a9a9ef8ce5..17c7dc8503 100644 --- a/briar-android/src/org/briarproject/android/Destroyable.java +++ b/briar-android/src/org/briarproject/android/Destroyable.java @@ -2,7 +2,7 @@ package org.briarproject.android; import android.support.annotation.UiThread; -interface Destroyable { +public interface Destroyable { @UiThread boolean hasBeenDestroyed(); diff --git a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java index 5c175517de..4ff2695e3d 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java @@ -209,7 +209,7 @@ public class BlogFragment extends BaseFragment implements public void onBlogPostAdded(BlogPostHeader header, final boolean local) { blogController.loadBlogPost(header, new UiResultExceptionHandler<BlogPostItem, DbException>( - getActivity()) { + listener) { @Override public void onResultUi(BlogPostItem post) { adapter.add(post); @@ -233,7 +233,7 @@ public class BlogFragment extends BaseFragment implements void loadBlogPosts(final boolean reload) { blogController.loadBlogPosts( new UiResultExceptionHandler<Collection<BlogPostItem>, DbException>( - getActivity()) { + listener) { @Override public void onResultUi(Collection<BlogPostItem> posts) { if (posts.size() > 0) { @@ -254,8 +254,7 @@ public class BlogFragment extends BaseFragment implements private void loadBlog() { blogController.loadBlog( - new UiResultExceptionHandler<BlogItem, DbException>( - getActivity()) { + new UiResultExceptionHandler<BlogItem, DbException>(listener) { @Override public void onResultUi(BlogItem blog) { setToolbarTitle(blog.getBlog().getAuthor()); @@ -333,7 +332,7 @@ public class BlogFragment extends BaseFragment implements private void deleteBlog() { blogController.deleteBlog( - new UiResultExceptionHandler<Void, DbException>(getActivity()) { + new UiResultExceptionHandler<Void, DbException>(listener) { @Override public void onResultUi(Void result) { Toast.makeText(getActivity(), diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java index 39c1bf3a5d..ac7b4d504e 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java @@ -62,7 +62,7 @@ public class BlogPostFragment extends BasePostFragment { super.onStart(); blogController.loadBlogPost(postId, new UiResultExceptionHandler<BlogPostItem, DbException>( - getActivity()) { + listener) { @Override public void onResultUi(BlogPostItem post) { onBlogPostLoaded(post); diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostPagerFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogPostPagerFragment.java index 3a68030a1e..f0a534b847 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogPostPagerFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogPostPagerFragment.java @@ -45,7 +45,7 @@ public class BlogPostPagerFragment extends BasePostPagerFragment { void loadBlogPosts(final MessageId select) { blogController.loadBlogPosts( new UiResultExceptionHandler<Collection<BlogPostItem>, DbException>( - getActivity()) { + listener) { @Override public void onResultUi(Collection<BlogPostItem> posts) { onBlogPostsLoaded(select, posts); @@ -61,7 +61,7 @@ public class BlogPostPagerFragment extends BasePostPagerFragment { void loadBlogPost(BlogPostHeader header) { blogController.loadBlogPost(header, new UiResultExceptionHandler<BlogPostItem, DbException>( - getActivity()) { + listener) { @Override public void onResultUi(BlogPostItem post) { addPost(post); diff --git a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java index dbdd111271..41791e962c 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java @@ -108,7 +108,7 @@ public class FeedFragment extends BaseFragment implements }); feedController.loadBlogPosts( new UiResultExceptionHandler<Collection<BlogPostItem>, DbException>( - getActivity()) { + listener) { @Override public void onResultUi(Collection<BlogPostItem> posts) { if (posts.isEmpty()) { @@ -175,7 +175,7 @@ public class FeedFragment extends BaseFragment implements public void onBlogPostAdded(BlogPostHeader header, final boolean local) { feedController.loadBlogPost(header, new UiResultExceptionHandler<BlogPostItem, DbException>( - getActivity()) { + listener) { @Override public void onResultUi(BlogPostItem post) { adapter.add(post); diff --git a/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java b/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java index 807bcd6e34..442a85ef98 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java @@ -65,7 +65,7 @@ public class FeedPostFragment extends BasePostFragment { super.onStart(); feedController.loadBlogPost(blogId, postId, new UiResultExceptionHandler<BlogPostItem, DbException>( - getActivity()) { + listener) { @Override public void onResultUi(BlogPostItem post) { onBlogPostLoaded(post); diff --git a/briar-android/src/org/briarproject/android/blogs/FeedPostPagerFragment.java b/briar-android/src/org/briarproject/android/blogs/FeedPostPagerFragment.java index df2c4e33ec..ab9444104c 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedPostPagerFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedPostPagerFragment.java @@ -44,7 +44,7 @@ public class FeedPostPagerFragment extends BasePostPagerFragment { void loadBlogPosts(final MessageId select) { feedController.loadBlogPosts( new UiResultExceptionHandler<Collection<BlogPostItem>, DbException>( - getActivity()) { + listener) { @Override public void onResultUi(Collection<BlogPostItem> posts) { onBlogPostsLoaded(select, posts); @@ -60,7 +60,7 @@ public class FeedPostPagerFragment extends BasePostPagerFragment { void loadBlogPost(BlogPostHeader header) { feedController.loadBlogPost(header, new UiResultExceptionHandler<BlogPostItem, DbException>( - getActivity()) { + listener) { @Override public void onResultUi(BlogPostItem post) { addPost(post); diff --git a/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java b/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java index 87ac613805..305273ba8d 100644 --- a/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java @@ -106,7 +106,7 @@ public class ReblogFragment extends BaseFragment { // TODO: Load blog post when fragment is created. #631 feedController.loadBlogPost(blogId, postId, new UiResultExceptionHandler<BlogPostItem, DbException>( - getActivity()) { + listener) { @Override public void onResultUi(BlogPostItem result) { item = result; @@ -148,7 +148,7 @@ public class ReblogFragment extends BaseFragment { private void send() { String comment = getComment(); feedController.repeatPost(item, comment, - new UiResultExceptionHandler<Void, DbException>(getActivity()) { + new UiResultExceptionHandler<Void, DbException>(listener) { @Override public void onResultUi(Void result) { // do nothing, this fragment is gone already diff --git a/briar-android/src/org/briarproject/android/controller/handler/UiResultExceptionHandler.java b/briar-android/src/org/briarproject/android/controller/handler/UiResultExceptionHandler.java index ba2eab195a..1f9cab0937 100644 --- a/briar-android/src/org/briarproject/android/controller/handler/UiResultExceptionHandler.java +++ b/briar-android/src/org/briarproject/android/controller/handler/UiResultExceptionHandler.java @@ -1,33 +1,36 @@ package org.briarproject.android.controller.handler; -import android.app.Activity; import android.support.annotation.UiThread; +import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener; + public abstract class UiResultExceptionHandler<R, E extends Exception> implements ResultExceptionHandler<R, E> { - private final Activity activity; + private final BaseFragmentListener listener; - public UiResultExceptionHandler(Activity activity) { - this.activity = activity; + protected UiResultExceptionHandler(BaseFragmentListener listener) { + this.listener = listener; } @Override public void onResult(final R result) { - activity.runOnUiThread(new Runnable() { + listener.runOnUiThread(new Runnable() { @Override public void run() { - onResultUi(result); + if (!listener.hasBeenDestroyed()) + onResultUi(result); } }); } @Override public void onException(final E exception) { - activity.runOnUiThread(new Runnable() { + listener.runOnUiThread(new Runnable() { @Override public void run() { - onExceptionUi(exception); + if (!listener.hasBeenDestroyed()) + onExceptionUi(exception); } }); } diff --git a/briar-android/src/org/briarproject/android/controller/handler/UiResultHandler.java b/briar-android/src/org/briarproject/android/controller/handler/UiResultHandler.java index 0616b82a2b..03c68d7ac6 100644 --- a/briar-android/src/org/briarproject/android/controller/handler/UiResultHandler.java +++ b/briar-android/src/org/briarproject/android/controller/handler/UiResultHandler.java @@ -1,22 +1,24 @@ package org.briarproject.android.controller.handler; -import android.app.Activity; import android.support.annotation.UiThread; +import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener; + public abstract class UiResultHandler<R> implements ResultHandler<R> { - private final Activity activity; + private final BaseFragmentListener listener; - public UiResultHandler(Activity activity) { - this.activity = activity; + protected UiResultHandler(BaseFragmentListener listener) { + this.listener = listener; } @Override public void onResult(final R result) { - activity.runOnUiThread(new Runnable() { + listener.runOnUiThread(new Runnable() { @Override public void run() { - onResultUi(result); + if (!listener.hasBeenDestroyed()) + onResultUi(result); } }); } diff --git a/briar-android/src/org/briarproject/android/fragment/BaseFragment.java b/briar-android/src/org/briarproject/android/fragment/BaseFragment.java index c19bcf1eed..d6f4ed363a 100644 --- a/briar-android/src/org/briarproject/android/fragment/BaseFragment.java +++ b/briar-android/src/org/briarproject/android/fragment/BaseFragment.java @@ -7,6 +7,7 @@ import android.support.annotation.UiThread; import android.support.v4.app.Fragment; import org.briarproject.android.ActivityComponent; +import org.briarproject.android.Destroyable; public abstract class BaseFragment extends Fragment { @@ -45,7 +46,7 @@ public abstract class BaseFragment extends Fragment { getActivity().supportFinishAfterTransition(); } - public interface BaseFragmentListener { + public interface BaseFragmentListener extends Destroyable { @UiThread void showLoadingScreen(boolean isBlocking, int stringId); -- GitLab