From ab9152081369c9870fc9dbd6f80c4bd99fded49a Mon Sep 17 00:00:00 2001
From: Ernir Erlingsson <ernir@ymirmobile.com>
Date: Thu, 17 Nov 2016 11:05:00 +0100
Subject: [PATCH] refactored the activity module

---
 .../android/ActivityComponent.java            |  17 ++-
 .../briarproject/android/ActivityModule.java  | 120 ------------------
 .../briarproject/android/BaseActivity.java    |   6 +
 .../android/blogs/BlogControllerImpl.java     |   2 +-
 .../android/blogs/BlogModule.java             |  25 ++++
 .../android/blogs/FeedControllerImpl.java     |   2 +-
 .../android/contact/ContactModule.java        |   7 +
 .../android/forum/ForumControllerImpl.java    |   2 +-
 .../android/forum/ForumModule.java            |  20 +++
 .../conversation/GroupControllerImpl.java     |   2 +-
 .../conversation/GroupConversationModule.java |  19 +++
 .../creation/CreateGroupControllerImpl.java   |   2 +-
 .../creation/GroupCreateModule.java           |  18 +++
 .../GroupInvitationControllerImpl.java        |   2 +-
 .../invitation/GroupInvitationModule.java     |  17 +++
 .../list/GroupListControllerImpl.java         |   2 +-
 .../privategroup/list/GroupListModule.java    |  17 +++
 .../GroupMemberListControllerImpl.java        |   2 +-
 .../memberlist/GroupMemberModule.java         |  17 +++
 .../reveal/GroupRevealModule.java             |  17 +++
 .../reveal/RevealContactsControllerImpl.java  |   2 +-
 .../sharing/BlogInvitationControllerImpl.java |   2 +-
 .../ForumInvitationControllerImpl.java        |   2 +-
 .../sharing/ShareBlogControllerImpl.java      |   2 +-
 .../sharing/ShareForumControllerImpl.java     |   2 +-
 .../android/sharing/SharingModule.java        |  44 +++++++
 .../android/forum/TestForumActivity.java      |   9 +-
 27 files changed, 244 insertions(+), 135 deletions(-)
 create mode 100644 briar-android/src/org/briarproject/android/blogs/BlogModule.java
 create mode 100644 briar-android/src/org/briarproject/android/contact/ContactModule.java
 create mode 100644 briar-android/src/org/briarproject/android/forum/ForumModule.java
 create mode 100644 briar-android/src/org/briarproject/android/privategroup/conversation/GroupConversationModule.java
 create mode 100644 briar-android/src/org/briarproject/android/privategroup/creation/GroupCreateModule.java
 create mode 100644 briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationModule.java
 create mode 100644 briar-android/src/org/briarproject/android/privategroup/list/GroupListModule.java
 create mode 100644 briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberModule.java
 create mode 100644 briar-android/src/org/briarproject/android/privategroup/reveal/GroupRevealModule.java
 create mode 100644 briar-android/src/org/briarproject/android/sharing/SharingModule.java

diff --git a/briar-android/src/org/briarproject/android/ActivityComponent.java b/briar-android/src/org/briarproject/android/ActivityComponent.java
index a8b3dee8b9..7f5b272848 100644
--- a/briar-android/src/org/briarproject/android/ActivityComponent.java
+++ b/briar-android/src/org/briarproject/android/ActivityComponent.java
@@ -4,6 +4,7 @@ import android.app.Activity;
 
 import org.briarproject.android.blogs.BlogActivity;
 import org.briarproject.android.blogs.BlogFragment;
+import org.briarproject.android.blogs.BlogModule;
 import org.briarproject.android.blogs.BlogPostFragment;
 import org.briarproject.android.blogs.BlogPostPagerFragment;
 import org.briarproject.android.blogs.FeedFragment;
@@ -15,10 +16,12 @@ import org.briarproject.android.blogs.RssFeedImportActivity;
 import org.briarproject.android.blogs.RssFeedManageActivity;
 import org.briarproject.android.blogs.WriteBlogPostActivity;
 import org.briarproject.android.contact.ContactListFragment;
+import org.briarproject.android.contact.ContactModule;
 import org.briarproject.android.contact.ConversationActivity;
 import org.briarproject.android.forum.CreateForumActivity;
 import org.briarproject.android.forum.ForumActivity;
 import org.briarproject.android.forum.ForumListFragment;
+import org.briarproject.android.forum.ForumModule;
 import org.briarproject.android.introduction.ContactChooserFragment;
 import org.briarproject.android.introduction.IntroductionActivity;
 import org.briarproject.android.introduction.IntroductionMessageFragment;
@@ -29,14 +32,20 @@ import org.briarproject.android.keyagreement.ShowQrCodeFragment;
 import org.briarproject.android.panic.PanicPreferencesActivity;
 import org.briarproject.android.panic.PanicResponderActivity;
 import org.briarproject.android.privategroup.conversation.GroupActivity;
+import org.briarproject.android.privategroup.conversation.GroupConversationModule;
 import org.briarproject.android.privategroup.creation.CreateGroupActivity;
 import org.briarproject.android.privategroup.creation.CreateGroupFragment;
 import org.briarproject.android.privategroup.creation.CreateGroupMessageFragment;
+import org.briarproject.android.privategroup.creation.GroupCreateModule;
 import org.briarproject.android.privategroup.creation.GroupInviteActivity;
 import org.briarproject.android.privategroup.creation.GroupInviteFragment;
 import org.briarproject.android.privategroup.invitation.GroupInvitationActivity;
+import org.briarproject.android.privategroup.invitation.GroupInvitationModule;
 import org.briarproject.android.privategroup.list.GroupListFragment;
+import org.briarproject.android.privategroup.list.GroupListModule;
 import org.briarproject.android.privategroup.memberlist.GroupMemberListActivity;
+import org.briarproject.android.privategroup.memberlist.GroupMemberModule;
+import org.briarproject.android.privategroup.reveal.GroupRevealModule;
 import org.briarproject.android.privategroup.reveal.RevealContactsActivity;
 import org.briarproject.android.privategroup.reveal.RevealContactsFragment;
 import org.briarproject.android.sharing.BlogInvitationActivity;
@@ -49,13 +58,19 @@ import org.briarproject.android.sharing.ShareBlogMessageFragment;
 import org.briarproject.android.sharing.ShareForumActivity;
 import org.briarproject.android.sharing.ShareForumFragment;
 import org.briarproject.android.sharing.ShareForumMessageFragment;
+import org.briarproject.android.sharing.SharingModule;
 import org.thoughtcrime.securesms.components.emoji.EmojiProvider;
 import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel;
 
 import dagger.Component;
 
 @ActivityScope
-@Component(modules = ActivityModule.class,
+@Component(
+		modules = {ActivityModule.class, ForumModule.class, SharingModule.class,
+				BlogModule.class, ContactModule.class, GroupListModule.class,
+				GroupCreateModule.class, GroupInvitationModule.class,
+				GroupConversationModule.class, GroupMemberModule.class,
+				GroupRevealModule.class},
 		dependencies = AndroidComponent.class)
 public interface ActivityComponent {
 
diff --git a/briar-android/src/org/briarproject/android/ActivityModule.java b/briar-android/src/org/briarproject/android/ActivityModule.java
index 4f17c24bc6..0402ef56fc 100644
--- a/briar-android/src/org/briarproject/android/ActivityModule.java
+++ b/briar-android/src/org/briarproject/android/ActivityModule.java
@@ -3,10 +3,6 @@ package org.briarproject.android;
 import android.app.Activity;
 import android.content.SharedPreferences;
 
-import org.briarproject.android.blogs.BlogController;
-import org.briarproject.android.blogs.BlogControllerImpl;
-import org.briarproject.android.blogs.FeedController;
-import org.briarproject.android.blogs.FeedControllerImpl;
 import org.briarproject.android.controller.BriarController;
 import org.briarproject.android.controller.BriarControllerImpl;
 import org.briarproject.android.controller.ConfigController;
@@ -19,28 +15,6 @@ import org.briarproject.android.controller.PasswordController;
 import org.briarproject.android.controller.PasswordControllerImpl;
 import org.briarproject.android.controller.SetupController;
 import org.briarproject.android.controller.SetupControllerImpl;
-import org.briarproject.android.forum.ForumController;
-import org.briarproject.android.forum.ForumControllerImpl;
-import org.briarproject.android.privategroup.conversation.GroupController;
-import org.briarproject.android.privategroup.conversation.GroupControllerImpl;
-import org.briarproject.android.privategroup.creation.CreateGroupController;
-import org.briarproject.android.privategroup.creation.CreateGroupControllerImpl;
-import org.briarproject.android.privategroup.invitation.GroupInvitationController;
-import org.briarproject.android.privategroup.invitation.GroupInvitationControllerImpl;
-import org.briarproject.android.privategroup.list.GroupListController;
-import org.briarproject.android.privategroup.list.GroupListControllerImpl;
-import org.briarproject.android.privategroup.memberlist.GroupMemberListController;
-import org.briarproject.android.privategroup.memberlist.GroupMemberListControllerImpl;
-import org.briarproject.android.privategroup.reveal.RevealContactsController;
-import org.briarproject.android.privategroup.reveal.RevealContactsControllerImpl;
-import org.briarproject.android.sharing.BlogInvitationController;
-import org.briarproject.android.sharing.BlogInvitationControllerImpl;
-import org.briarproject.android.sharing.ForumInvitationController;
-import org.briarproject.android.sharing.ForumInvitationControllerImpl;
-import org.briarproject.android.sharing.ShareBlogController;
-import org.briarproject.android.sharing.ShareBlogControllerImpl;
-import org.briarproject.android.sharing.ShareForumController;
-import org.briarproject.android.sharing.ShareForumControllerImpl;
 
 import dagger.Module;
 import dagger.Provides;
@@ -110,100 +84,6 @@ public class ActivityModule {
 		return dbController;
 	}
 
-	@ActivityScope
-	@Provides
-	GroupListController provideGroupListController(
-			GroupListControllerImpl groupListController) {
-		return groupListController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected CreateGroupController provideCreateGroupController(
-			CreateGroupControllerImpl createGroupController) {
-		return createGroupController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected GroupController provideGroupController(
-			GroupControllerImpl groupController) {
-		activity.addLifecycleController(groupController);
-		return groupController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected GroupInvitationController provideInvitationGroupController(
-			GroupInvitationControllerImpl groupInvitationController) {
-		return groupInvitationController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected GroupMemberListController provideGroupMemberListController(
-			GroupMemberListControllerImpl groupMemberListController) {
-		return groupMemberListController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected RevealContactsController provideRevealContactsController(
-			RevealContactsControllerImpl revealContactsController) {
-		return revealContactsController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected ForumController provideForumController(
-			ForumControllerImpl forumController) {
-		activity.addLifecycleController(forumController);
-		return forumController;
-	}
-
-	@ActivityScope
-	@Provides
-	ShareForumController provideShareForumController(
-			ShareForumControllerImpl shareForumController) {
-		return shareForumController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected ForumInvitationController provideInvitationForumController(
-			ForumInvitationControllerImpl forumInvitationController) {
-		activity.addLifecycleController(forumInvitationController);
-		return forumInvitationController;
-	}
-
-	@ActivityScope
-	@Provides
-	protected BlogInvitationController provideInvitationBlogController(
-			BlogInvitationControllerImpl blogInvitationController) {
-		activity.addLifecycleController(blogInvitationController);
-		return blogInvitationController;
-	}
-
-	@ActivityScope
-	@Provides
-	BlogController provideBlogController(BlogControllerImpl blogController) {
-		activity.addLifecycleController(blogController);
-		return blogController;
-	}
-
-	@ActivityScope
-	@Provides
-	ShareBlogController provideShareBlogController(
-			ShareBlogControllerImpl shareBlogController) {
-		return shareBlogController;
-	}
-
-	@ActivityScope
-	@Provides
-	FeedController provideFeedController(FeedControllerImpl feedController) {
-		return feedController;
-	}
-
 	@ActivityScope
 	@Provides
 	NavDrawerController provideNavDrawerController(
diff --git a/briar-android/src/org/briarproject/android/BaseActivity.java b/briar-android/src/org/briarproject/android/BaseActivity.java
index daa5bf4668..02395fbf10 100644
--- a/briar-android/src/org/briarproject/android/BaseActivity.java
+++ b/briar-android/src/org/briarproject/android/BaseActivity.java
@@ -8,6 +8,7 @@ import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 
 import org.briarproject.android.controller.ActivityLifecycleController;
+import org.briarproject.android.forum.ForumModule;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -43,6 +44,7 @@ public abstract class BaseActivity extends AppCompatActivity
 		activityComponent = DaggerActivityComponent.builder()
 				.androidComponent(applicationComponent)
 				.activityModule(getActivityModule())
+				.forumModule(getForumModule())
 				.build();
 
 		injectActivity(activityComponent);
@@ -61,6 +63,10 @@ public abstract class BaseActivity extends AppCompatActivity
 		return new ActivityModule(this);
 	}
 
+	protected ForumModule getForumModule() {
+		return new ForumModule();
+	}
+
 	@Override
 	protected void onStart() {
 		super.onStart();
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java b/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java
index 64cee65a5b..abc5108e94 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java
@@ -29,7 +29,7 @@ import javax.inject.Inject;
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
 
-public class BlogControllerImpl extends BaseControllerImpl
+class BlogControllerImpl extends BaseControllerImpl
 		implements ActivityLifecycleController, BlogController, EventListener {
 
 	private static final Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogModule.java b/briar-android/src/org/briarproject/android/blogs/BlogModule.java
new file mode 100644
index 0000000000..f4392e90a4
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/blogs/BlogModule.java
@@ -0,0 +1,25 @@
+package org.briarproject.android.blogs;
+
+import org.briarproject.android.ActivityScope;
+import org.briarproject.android.BaseActivity;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class BlogModule {
+
+	@ActivityScope
+	@Provides
+	BlogController provideBlogController(BaseActivity activity,
+			BlogControllerImpl blogController) {
+		activity.addLifecycleController(blogController);
+		return blogController;
+	}
+
+	@ActivityScope
+	@Provides
+	FeedController provideFeedController(FeedControllerImpl feedController) {
+		return feedController;
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java b/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java
index 33cce78e29..a70097b34d 100644
--- a/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java
@@ -27,7 +27,7 @@ import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
 import static org.briarproject.api.blogs.BlogManager.CLIENT_ID;
 
-public class FeedControllerImpl extends BaseControllerImpl
+class FeedControllerImpl extends BaseControllerImpl
 		implements FeedController {
 
 	private static final Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/contact/ContactModule.java b/briar-android/src/org/briarproject/android/contact/ContactModule.java
new file mode 100644
index 0000000000..b9bf00e24d
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/contact/ContactModule.java
@@ -0,0 +1,7 @@
+package org.briarproject.android.contact;
+
+import dagger.Module;
+
+@Module
+public class ContactModule {
+}
diff --git a/briar-android/src/org/briarproject/android/forum/ForumControllerImpl.java b/briar-android/src/org/briarproject/android/forum/ForumControllerImpl.java
index 55c8f817b8..7cc859614d 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumControllerImpl.java
@@ -32,7 +32,7 @@ import javax.inject.Inject;
 import static java.lang.Math.max;
 import static java.util.logging.Level.WARNING;
 
-public class ForumControllerImpl
+class ForumControllerImpl
 		extends ThreadListControllerImpl<Forum, ForumItem, ForumPostHeader, ForumPost, ThreadListListener<ForumPostHeader>>
 		implements ForumController {
 
diff --git a/briar-android/src/org/briarproject/android/forum/ForumModule.java b/briar-android/src/org/briarproject/android/forum/ForumModule.java
new file mode 100644
index 0000000000..9b665673be
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/forum/ForumModule.java
@@ -0,0 +1,20 @@
+package org.briarproject.android.forum;
+
+import org.briarproject.android.ActivityScope;
+import org.briarproject.android.BaseActivity;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class ForumModule {
+
+	@ActivityScope
+	@Provides
+	ForumController provideForumController(BaseActivity activity,
+			ForumControllerImpl forumController) {
+		activity.addLifecycleController(forumController);
+		return forumController;
+	}
+
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java
index 630da0e85b..7cea3d521f 100644
--- a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java
@@ -36,7 +36,7 @@ import javax.inject.Inject;
 import static java.lang.Math.max;
 import static java.util.logging.Level.WARNING;
 
-public class GroupControllerImpl extends
+class GroupControllerImpl extends
 		ThreadListControllerImpl<PrivateGroup, GroupMessageItem, GroupMessageHeader, GroupMessage, GroupListener>
 		implements GroupController {
 
diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupConversationModule.java b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupConversationModule.java
new file mode 100644
index 0000000000..8595b461c3
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupConversationModule.java
@@ -0,0 +1,19 @@
+package org.briarproject.android.privategroup.conversation;
+
+import org.briarproject.android.ActivityScope;
+import org.briarproject.android.BaseActivity;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class GroupConversationModule {
+
+	@ActivityScope
+	@Provides
+	GroupController provideGroupController(BaseActivity activity,
+			GroupControllerImpl groupController) {
+		activity.addLifecycleController(groupController);
+		return groupController;
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupControllerImpl.java b/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupControllerImpl.java
index d63e3e128e..051f5a20f9 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupControllerImpl.java
@@ -36,7 +36,7 @@ import static java.util.logging.Level.WARNING;
 
 @Immutable
 @NotNullByDefault
-public class CreateGroupControllerImpl extends ContactSelectorControllerImpl
+class CreateGroupControllerImpl extends ContactSelectorControllerImpl
 		implements CreateGroupController {
 
 	private static final Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/GroupCreateModule.java b/briar-android/src/org/briarproject/android/privategroup/creation/GroupCreateModule.java
new file mode 100644
index 0000000000..a553cb0ed4
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/privategroup/creation/GroupCreateModule.java
@@ -0,0 +1,18 @@
+package org.briarproject.android.privategroup.creation;
+
+import org.briarproject.android.ActivityScope;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class GroupCreateModule {
+
+	@ActivityScope
+	@Provides
+	protected CreateGroupController provideCreateGroupController(
+			CreateGroupControllerImpl createGroupController) {
+		return createGroupController;
+	}
+
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationControllerImpl.java b/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationControllerImpl.java
index bf4101edc1..68a8690791 100644
--- a/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationControllerImpl.java
@@ -25,7 +25,7 @@ import static java.util.logging.Level.WARNING;
 import static org.briarproject.api.privategroup.PrivateGroupManager.CLIENT_ID;
 
 @NotNullByDefault
-public class GroupInvitationControllerImpl
+class GroupInvitationControllerImpl
 		extends InvitationControllerImpl<GroupInvitationItem>
 		implements GroupInvitationController {
 
diff --git a/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationModule.java b/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationModule.java
new file mode 100644
index 0000000000..b6998cd195
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/privategroup/invitation/GroupInvitationModule.java
@@ -0,0 +1,17 @@
+package org.briarproject.android.privategroup.invitation;
+
+import org.briarproject.android.ActivityScope;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class GroupInvitationModule {
+
+	@ActivityScope
+	@Provides
+	GroupInvitationController provideInvitationGroupController(
+			GroupInvitationControllerImpl groupInvitationController) {
+		return groupInvitationController;
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java b/briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java
index 5c86e79f81..f756f6ffcb 100644
--- a/briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java
@@ -38,7 +38,7 @@ import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
 import static org.briarproject.api.privategroup.PrivateGroupManager.CLIENT_ID;
 
-public class GroupListControllerImpl extends DbControllerImpl
+class GroupListControllerImpl extends DbControllerImpl
 		implements GroupListController, EventListener {
 
 	private static final Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/privategroup/list/GroupListModule.java b/briar-android/src/org/briarproject/android/privategroup/list/GroupListModule.java
new file mode 100644
index 0000000000..2bf5c56543
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/privategroup/list/GroupListModule.java
@@ -0,0 +1,17 @@
+package org.briarproject.android.privategroup.list;
+
+import org.briarproject.android.ActivityScope;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class GroupListModule {
+
+	@ActivityScope
+	@Provides
+	GroupListController provideGroupListController(
+			GroupListControllerImpl groupListController) {
+		return groupListController;
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberListControllerImpl.java b/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberListControllerImpl.java
index 6b317558c4..8a91bee96e 100644
--- a/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberListControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberListControllerImpl.java
@@ -18,7 +18,7 @@ import javax.inject.Inject;
 
 import static java.util.logging.Level.WARNING;
 
-public class GroupMemberListControllerImpl extends DbControllerImpl
+class GroupMemberListControllerImpl extends DbControllerImpl
 		implements GroupMemberListController {
 
 	private static final Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberModule.java b/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberModule.java
new file mode 100644
index 0000000000..e92d2e9478
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/privategroup/memberlist/GroupMemberModule.java
@@ -0,0 +1,17 @@
+package org.briarproject.android.privategroup.memberlist;
+
+import org.briarproject.android.ActivityScope;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class GroupMemberModule {
+
+	@ActivityScope
+	@Provides
+	GroupMemberListController provideGroupMemberListController(
+			GroupMemberListControllerImpl groupMemberListController) {
+		return groupMemberListController;
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/reveal/GroupRevealModule.java b/briar-android/src/org/briarproject/android/privategroup/reveal/GroupRevealModule.java
new file mode 100644
index 0000000000..dad020c3f6
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/privategroup/reveal/GroupRevealModule.java
@@ -0,0 +1,17 @@
+package org.briarproject.android.privategroup.reveal;
+
+import org.briarproject.android.ActivityScope;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class GroupRevealModule {
+
+	@ActivityScope
+	@Provides
+	RevealContactsController provideRevealContactsController(
+			RevealContactsControllerImpl revealContactsController) {
+		return revealContactsController;
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsControllerImpl.java b/briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsControllerImpl.java
index d0b89a0e24..985708f2ed 100644
--- a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/privategroup/reveal/RevealContactsControllerImpl.java
@@ -33,7 +33,7 @@ import static org.briarproject.api.privategroup.Visibility.INVISIBLE;
 
 @Immutable
 @NotNullByDefault
-public class RevealContactsControllerImpl extends DbControllerImpl
+class RevealContactsControllerImpl extends DbControllerImpl
 		implements RevealContactsController {
 
 	private static final Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/sharing/BlogInvitationControllerImpl.java b/briar-android/src/org/briarproject/android/sharing/BlogInvitationControllerImpl.java
index 83bb183fa3..8b1a318484 100644
--- a/briar-android/src/org/briarproject/android/sharing/BlogInvitationControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/sharing/BlogInvitationControllerImpl.java
@@ -23,7 +23,7 @@ import static java.util.logging.Level.WARNING;
 import static org.briarproject.api.blogs.BlogManager.CLIENT_ID;
 
 @NotNullByDefault
-public class BlogInvitationControllerImpl
+class BlogInvitationControllerImpl
 		extends InvitationControllerImpl<SharingInvitationItem>
 		implements BlogInvitationController {
 
diff --git a/briar-android/src/org/briarproject/android/sharing/ForumInvitationControllerImpl.java b/briar-android/src/org/briarproject/android/sharing/ForumInvitationControllerImpl.java
index a472ecb4d3..38274956ac 100644
--- a/briar-android/src/org/briarproject/android/sharing/ForumInvitationControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/sharing/ForumInvitationControllerImpl.java
@@ -23,7 +23,7 @@ import static java.util.logging.Level.WARNING;
 import static org.briarproject.api.forum.ForumManager.CLIENT_ID;
 
 @NotNullByDefault
-public class ForumInvitationControllerImpl
+class ForumInvitationControllerImpl
 		extends InvitationControllerImpl<SharingInvitationItem>
 		implements ForumInvitationController {
 
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareBlogControllerImpl.java b/briar-android/src/org/briarproject/android/sharing/ShareBlogControllerImpl.java
index a2f9be5b39..33e21f3d15 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareBlogControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/sharing/ShareBlogControllerImpl.java
@@ -25,7 +25,7 @@ import static java.util.logging.Level.WARNING;
 
 @Immutable
 @NotNullByDefault
-public class ShareBlogControllerImpl extends ContactSelectorControllerImpl
+class ShareBlogControllerImpl extends ContactSelectorControllerImpl
 		implements ShareBlogController {
 
 	private final static Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareForumControllerImpl.java b/briar-android/src/org/briarproject/android/sharing/ShareForumControllerImpl.java
index b59f0a5585..73eba81b67 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareForumControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/sharing/ShareForumControllerImpl.java
@@ -25,7 +25,7 @@ import static java.util.logging.Level.WARNING;
 
 @Immutable
 @NotNullByDefault
-public class ShareForumControllerImpl extends ContactSelectorControllerImpl
+class ShareForumControllerImpl extends ContactSelectorControllerImpl
 		implements ShareForumController {
 
 	private final static Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/sharing/SharingModule.java b/briar-android/src/org/briarproject/android/sharing/SharingModule.java
new file mode 100644
index 0000000000..de632f6b13
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/sharing/SharingModule.java
@@ -0,0 +1,44 @@
+package org.briarproject.android.sharing;
+
+import org.briarproject.android.ActivityScope;
+import org.briarproject.android.BaseActivity;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class SharingModule {
+
+	@ActivityScope
+	@Provides
+	ShareForumController provideShareForumController(
+			ShareForumControllerImpl shareForumController) {
+		return shareForumController;
+	}
+
+	@ActivityScope
+	@Provides
+	BlogInvitationController provideInvitationBlogController(
+			BaseActivity activity,
+			BlogInvitationControllerImpl blogInvitationController) {
+		activity.addLifecycleController(blogInvitationController);
+		return blogInvitationController;
+	}
+
+	@ActivityScope
+	@Provides
+	ForumInvitationController provideInvitationForumController(
+			BaseActivity activity,
+			ForumInvitationControllerImpl forumInvitationController) {
+		activity.addLifecycleController(forumInvitationController);
+		return forumInvitationController;
+	}
+
+	@ActivityScope
+	@Provides
+	ShareBlogController provideShareBlogController(
+			ShareBlogControllerImpl shareBlogController) {
+		return shareBlogController;
+	}
+
+}
diff --git a/briar-android/test/java/org/briarproject/android/forum/TestForumActivity.java b/briar-android/test/java/org/briarproject/android/forum/TestForumActivity.java
index a77a88cc15..7d4ff2f7d2 100644
--- a/briar-android/test/java/org/briarproject/android/forum/TestForumActivity.java
+++ b/briar-android/test/java/org/briarproject/android/forum/TestForumActivity.java
@@ -1,6 +1,7 @@
 package org.briarproject.android.forum;
 
 import org.briarproject.android.ActivityModule;
+import org.briarproject.android.BaseActivity;
 import org.briarproject.android.controller.BriarController;
 import org.briarproject.android.controller.BriarControllerImpl;
 import org.briarproject.android.threaded.ThreadItemAdapter;
@@ -32,8 +33,14 @@ public class TestForumActivity extends ForumActivity {
 				return c;
 			}
 
+		};
+	}
+
+	@Override
+	protected ForumModule getForumModule() {
+		return new ForumModule() {
 			@Override
-			protected ForumController provideForumController(
+			ForumController provideForumController(BaseActivity activity,
 					ForumControllerImpl forumController) {
 				return Mockito.mock(ForumController.class);
 			}
-- 
GitLab