diff --git a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java index d93aa0563..35b57773e 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java @@ -47,7 +47,7 @@ import static org.briarproject.android.blogs.BlogActivity.REQUEST_WRITE_POST; public class BlogFragment extends BaseFragment implements OnBlogPostAddedListener { - public final static String TAG = BlogFragment.class.getName(); + private final static String TAG = BlogFragment.class.getName(); @Inject BlogController blogController; @@ -178,7 +178,7 @@ public class BlogFragment extends BaseFragment implements public void onBlogPostAdded(BlogPostHeader header, final boolean local) { blogController.loadBlogPost(header, new UiResultExceptionHandler( - listener) { + this) { @Override public void onResultUi(BlogPostItem post) { adapter.add(post); @@ -201,10 +201,10 @@ public class BlogFragment extends BaseFragment implements ); } - void loadBlogPosts(final boolean reload) { + private void loadBlogPosts(final boolean reload) { blogController.loadBlogPosts( new UiResultExceptionHandler, DbException>( - listener) { + this) { @Override public void onResultUi(Collection posts) { if (posts.isEmpty()) { @@ -225,7 +225,7 @@ public class BlogFragment extends BaseFragment implements private void loadBlog() { blogController.loadBlog( - new UiResultExceptionHandler(listener) { + new UiResultExceptionHandler(this) { @Override public void onResultUi(BlogItem blog) { setToolbarTitle(blog.getBlog().getAuthor()); @@ -299,7 +299,7 @@ public class BlogFragment extends BaseFragment implements private void deleteBlog() { blogController.deleteBlog( - new UiResultExceptionHandler(listener) { + new UiResultExceptionHandler(this) { @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 ac7b4d504..78b82874f 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( - listener) { + this) { @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 3db8c4d08..7c63d5c7d 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, DbException>( - listener) { + this) { @Override public void onResultUi(Collection posts) { onBlogPostsLoaded(select, posts); @@ -62,7 +62,7 @@ public class BlogPostPagerFragment extends BasePostPagerFragment { void loadBlogPost(BlogPostHeader header) { blogController.loadBlogPost(header, new UiResultExceptionHandler( - listener) { + this) { @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 5c7bd3949..60d8ed7c3 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java @@ -114,7 +114,7 @@ public class FeedFragment extends BaseFragment implements private void loadPersonalBlog() { feedController.loadPersonalBlog( - new UiResultExceptionHandler(listener) { + new UiResultExceptionHandler(this) { @Override public void onResultUi(Blog b) { personalBlog = b; @@ -131,7 +131,7 @@ public class FeedFragment extends BaseFragment implements final int revision = adapter.getRevision(); feedController.loadBlogPosts( new UiResultExceptionHandler, DbException>( - listener) { + this) { @Override public void onResultUi(Collection posts) { if (revision == adapter.getRevision()) { @@ -194,7 +194,7 @@ public class FeedFragment extends BaseFragment implements public void onBlogPostAdded(BlogPostHeader header, final boolean local) { feedController.loadBlogPost(header, new UiResultExceptionHandler( - listener) { + this) { @Override public void onResultUi(BlogPostItem post) { adapter.incrementRevision(); diff --git a/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java b/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java index 442a85ef9..002f69586 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( - listener) { + this) { @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 b37d99eef..381bb5e9b 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, DbException>( - listener) { + this) { @Override public void onResultUi(Collection posts) { onBlogPostsLoaded(select, posts); @@ -61,7 +61,7 @@ public class FeedPostPagerFragment extends BasePostPagerFragment { void loadBlogPost(BlogPostHeader header) { feedController.loadBlogPost(header, new UiResultExceptionHandler( - listener) { + this) { @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 479fecaad..a69e9ce96 100644 --- a/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java @@ -93,7 +93,7 @@ public class ReblogFragment extends BaseFragment implements TextInputListener { // TODO: Load blog post when fragment is created. #631 feedController.loadBlogPost(blogId, postId, new UiResultExceptionHandler( - listener) { + this) { @Override public void onResultUi(BlogPostItem result) { item = result; @@ -130,7 +130,7 @@ public class ReblogFragment extends BaseFragment implements TextInputListener { public void onSendClick(String text) { String comment = getComment(); feedController.repeatPost(item, comment, - new UiResultExceptionHandler(listener) { + new UiResultExceptionHandler(this) { @Override public void onResultUi(Void result) { // do nothing, this fragment is gone already diff --git a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java index 2d2a098b3..9582150a0 100644 --- a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java +++ b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java @@ -226,7 +226,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { private void displayContacts(final int revision, final List contacts) { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { if (revision == adapter.getRevision()) { @@ -292,7 +292,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { } private void updateItem(final ContactId c, final BaseMessageHeader h) { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { adapter.incrementRevision(); @@ -308,7 +308,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { } private void removeItem(final ContactId c) { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { adapter.incrementRevision(); @@ -320,7 +320,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { } private void setConnected(final ContactId c, final boolean connected) { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { adapter.incrementRevision(); diff --git a/briar-android/src/org/briarproject/android/forum/ForumListFragment.java b/briar-android/src/org/briarproject/android/forum/ForumListFragment.java index bb5d1eee0..2afce8316 100644 --- a/briar-android/src/org/briarproject/android/forum/ForumListFragment.java +++ b/briar-android/src/org/briarproject/android/forum/ForumListFragment.java @@ -178,7 +178,7 @@ public class ForumListFragment extends BaseEventFragment implements private void displayForums(final int revision, final Collection forums) { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { if (revision == adapter.getRevision()) { @@ -214,7 +214,7 @@ public class ForumListFragment extends BaseEventFragment implements } private void displayAvailableForums(final int availableCount) { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { if (availableCount == 0) { @@ -257,7 +257,7 @@ public class ForumListFragment extends BaseEventFragment implements } private void updateItem(final GroupId g, final ForumPostHeader m) { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { adapter.incrementRevision(); @@ -272,7 +272,7 @@ public class ForumListFragment extends BaseEventFragment implements } private void removeForum(final GroupId g) { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { adapter.incrementRevision(); diff --git a/briar-android/src/org/briarproject/android/fragment/BaseFragment.java b/briar-android/src/org/briarproject/android/fragment/BaseFragment.java index 223c01367..594cd841f 100644 --- a/briar-android/src/org/briarproject/android/fragment/BaseFragment.java +++ b/briar-android/src/org/briarproject/android/fragment/BaseFragment.java @@ -1,7 +1,9 @@ package org.briarproject.android.fragment; +import android.app.Activity; import android.content.Context; import android.os.Bundle; +import android.support.annotation.CallSuper; import android.support.annotation.Nullable; import android.support.annotation.UiThread; import android.support.v4.app.Fragment; @@ -33,7 +35,6 @@ public abstract class BaseFragment extends Fragment setHasOptionsMenu(true); } - @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); @@ -54,10 +55,11 @@ public abstract class BaseFragment extends Fragment @UiThread protected void finish() { - getActivity().supportFinishAfterTransition(); + if (!isDetached()) + getActivity().supportFinishAfterTransition(); } - public interface BaseFragmentListener extends DestroyableContext { + public interface BaseFragmentListener { @Deprecated void runOnDbThread(Runnable runnable); @@ -72,8 +74,21 @@ public abstract class BaseFragment extends Fragment void onFragmentCreated(String tag); } + @CallSuper @Override - public void runOnUiThreadUnlessDestroyed(Runnable r) { - listener.runOnUiThreadUnlessDestroyed(r); + public void runOnUiThreadUnlessDestroyed(final Runnable r) { + final Activity activity = getActivity(); + if (activity != null) { + activity.runOnUiThread(new Runnable() { + @Override + public void run() { + // Note that we don't have to check if the activity has + // been destroyed as the Fragment has not been detached yet + if (!isDetached() && !activity.isFinishing()) { + r.run(); + } + } + }); + } } } diff --git a/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java b/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java index 0f4704ca9..6e67eb867 100644 --- a/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java +++ b/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java @@ -272,7 +272,7 @@ public class ShowQrCodeFragment extends BaseEventFragment KeyAgreementAbortedEvent event = (KeyAgreementAbortedEvent) e; keyAgreementAborted(event.didRemoteAbort()); } else if (e instanceof KeyAgreementFinishedEvent) { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { mainProgressContainer.setVisibility(VISIBLE); @@ -313,7 +313,7 @@ public class ShowQrCodeFragment extends BaseEventFragment } private void setQrCode(final Payload localPayload) { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { generateBitmapQR(localPayload); @@ -322,7 +322,7 @@ public class ShowQrCodeFragment extends BaseEventFragment } private void keyAgreementFailed() { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { reset(); @@ -334,7 +334,7 @@ public class ShowQrCodeFragment extends BaseEventFragment } private void keyAgreementWaiting() { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { status.setText(R.string.waiting_for_contact_to_scan); @@ -343,7 +343,7 @@ public class ShowQrCodeFragment extends BaseEventFragment } private void keyAgreementStarted() { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { mainProgressContainer.setVisibility(VISIBLE); @@ -353,7 +353,7 @@ public class ShowQrCodeFragment extends BaseEventFragment } private void keyAgreementAborted(final boolean remoteAborted) { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { reset(); @@ -370,7 +370,7 @@ public class ShowQrCodeFragment extends BaseEventFragment @Override public void handleResult(final Result result) { - listener.runOnUiThreadUnlessDestroyed(new Runnable() { + runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { LOG.info("Got result from decoder"); diff --git a/briar-android/src/org/briarproject/android/privategroup/list/GroupListFragment.java b/briar-android/src/org/briarproject/android/privategroup/list/GroupListFragment.java index 64727401d..ec9f94b9f 100644 --- a/briar-android/src/org/briarproject/android/privategroup/list/GroupListFragment.java +++ b/briar-android/src/org/briarproject/android/privategroup/list/GroupListFragment.java @@ -126,7 +126,7 @@ public class GroupListFragment extends BaseFragment implements @Override public void onGroupRemoveClick(GroupItem item) { controller.removeGroup(item.getId(), - new UiResultExceptionHandler(listener) { + new UiResultExceptionHandler(this) { @Override public void onResultUi(Void result) { // handled by GroupRemovedEvent and onGroupRemoved() @@ -173,7 +173,7 @@ public class GroupListFragment extends BaseFragment implements final int revision = adapter.getRevision(); controller.loadGroups( new UiResultExceptionHandler, DbException>( - listener) { + this) { @Override public void onResultUi(Collection groups) { if (revision == adapter.getRevision()) {