diff --git a/briar-android/src/org/briarproject/android/Destroyable.java b/briar-android/src/org/briarproject/android/Destroyable.java index a9a9ef8ce5063d305c5db2a40287f6c57d3291ba..17c7dc8503367e81337d47f0e984e8c5d0ef0077 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 5c175517de0e95e0f9ef8960a3727d10c4549910..4ff2695e3d8ddfbefbaba41dc4952c683048865a 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 39c1bf3a5d80e8688e0aa6675b87321f5c22c673..ac7b4d504e440bafdf8254703239bd079bfca530 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 3a68030a1ea45446331531d3777025a2884f656a..f0a534b84714e8616dc77b07d671167ce76ebb12 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 dbdd11127198d60bbdb5d508942ccc4496bff245..41791e962cd69bbca1106f91f53a2f99c51cdf97 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 807bcd6e34f69b06d1a971b54f44d2516df0514e..442a85ef9877a91c9ee3f94e557b1e76f182e289 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 df2c4e33ecc1c33ea7ef4b0c19e973cede142cc5..ab9444104c6b3a84496be03d97cbe9d81a26f941 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 87ac6138050e313e02938d23e2e877f54df0f830..305273ba8d78e77c34a2b93398a2436fcf07a0d1 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 ba2eab195ade5bd7c2ded6a9445041b025d70aec..1f9cab0937b755488ff56313f564d2aa1553df91 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 0616b82a2bf2ad263575803c79f1d765a4826315..03c68d7ac6c694882f37e923f764c4ff93f0bba2 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 c19bcf1eed31cafa16714666da3283ab0a1901cb..d6f4ed363a1a125c5e88fe74de44e4f6fc779f2a 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);