diff --git a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java index d93aa05635427f167ec9ea3806f4611594a0473e..35b57773e69fd9609e9f4b4ddb6e3041f3c94f7b 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<BlogPostItem, DbException>( - 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<Collection<BlogPostItem>, DbException>( - listener) { + this) { @Override public void onResultUi(Collection<BlogPostItem> posts) { if (posts.isEmpty()) { @@ -225,7 +225,7 @@ public class BlogFragment extends BaseFragment implements private void loadBlog() { blogController.loadBlog( - new UiResultExceptionHandler<BlogItem, DbException>(listener) { + new UiResultExceptionHandler<BlogItem, DbException>(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<Void, DbException>(listener) { + new UiResultExceptionHandler<Void, DbException>(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 ac7b4d504e440bafdf8254703239bd079bfca530..78b82874fc6e01a664bac2ad229ee2579344c9d0 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>( - 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 3db8c4d084baf1c5766165191ea6d28aeeebbc2d..7c63d5c7d84a6ced24217e2a310ae8ff4eb49954 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>( - listener) { + this) { @Override public void onResultUi(Collection<BlogPostItem> posts) { onBlogPostsLoaded(select, posts); @@ -62,7 +62,7 @@ public class BlogPostPagerFragment extends BasePostPagerFragment { void loadBlogPost(BlogPostHeader header) { blogController.loadBlogPost(header, new UiResultExceptionHandler<BlogPostItem, DbException>( - 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 5c7bd39494eb2fdfef82b1a86289385a53a17d1d..60d8ed7c3ec21827da5ad541edb918d0db8bdc57 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<Blog, DbException>(listener) { + new UiResultExceptionHandler<Blog, DbException>(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<Collection<BlogPostItem>, DbException>( - listener) { + this) { @Override public void onResultUi(Collection<BlogPostItem> 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<BlogPostItem, DbException>( - 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 442a85ef9877a91c9ee3f94e557b1e76f182e289..002f69586d875c18c32c08aa584a464bab305a1c 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>( - 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 b37d99eefe7de372dc663bb957616a314ba0e860..381bb5e9b011c05276c82d77f5f0bb1270546f0f 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>( - listener) { + this) { @Override public void onResultUi(Collection<BlogPostItem> posts) { onBlogPostsLoaded(select, posts); @@ -61,7 +61,7 @@ public class FeedPostPagerFragment extends BasePostPagerFragment { void loadBlogPost(BlogPostHeader header) { feedController.loadBlogPost(header, new UiResultExceptionHandler<BlogPostItem, DbException>( - 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 479fecaadaff9cfaeea1b394f8faa64983ed07b2..a69e9ce96bea51d6b5c1e2693f50ae8606730cb1 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<BlogPostItem, DbException>( - 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<Void, DbException>(listener) { + new UiResultExceptionHandler<Void, DbException>(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 2d2a098b37d8830f72037b66dbf5bc9bfcf853ae..9582150a0ef1c8e49362cba4cde157ae4ef3774e 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<ContactListItem> 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 bb5d1eee0a231c2983aaa4c093c0ae0ac923519f..2afce83162282ceba6787edbe82ddb17d963b1d3 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<ForumListItem> 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 223c01367e28fb25a7a49b9e204941cca5c8f61e..594cd841fc205249fd1472b1fb196685d635b25b 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 0f4704ca9c20e04a93e3989056ae62b19101095f..6e67eb867ae034672ceea7fc4ba28f0bc245e60d 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 64727401dc37727b4b04e227267afaa6277924d0..ec9f94b9f446b6b156de50696ab569efaaefbb4f 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<Void, DbException>(listener) { + new UiResultExceptionHandler<Void, DbException>(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<Collection<GroupItem>, DbException>( - listener) { + this) { @Override public void onResultUi(Collection<GroupItem> groups) { if (revision == adapter.getRevision()) {