From 73df126bd4f001b25f5c1137cabe06ac67f99228 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Fri, 30 Jun 2017 18:13:48 +0100
Subject: [PATCH] Create and share private groups separately, as with forums.

---
 briar-android/src/main/AndroidManifest.xml    |  2 +-
 .../android/activity/ActivityComponent.java   |  4 +-
 .../creation/BaseGroupInviteActivity.java     | 58 -------------------
 .../creation/CreateGroupActivity.java         | 38 ++++--------
 ...eateModule.java => CreateGroupModule.java} |  2 +-
 .../creation/GroupInviteActivity.java         | 56 +++++++++++++++++-
 .../src/main/res/menu/group_actions.xml       | 14 ++---
 briar-android/src/main/res/values/strings.xml |  2 +-
 8 files changed, 77 insertions(+), 99 deletions(-)
 delete mode 100644 briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/BaseGroupInviteActivity.java
 rename briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/{GroupCreateModule.java => CreateGroupModule.java} (91%)

diff --git a/briar-android/src/main/AndroidManifest.xml b/briar-android/src/main/AndroidManifest.xml
index 0bb07db5ca..6df393ec04 100644
--- a/briar-android/src/main/AndroidManifest.xml
+++ b/briar-android/src/main/AndroidManifest.xml
@@ -179,7 +179,7 @@
 			android:name=".android.forum.CreateForumActivity"
 			android:label="@string/create_forum_title"
 			android:parentActivityName=".android.navdrawer.NavDrawerActivity"
-			android:windowSoftInputMode="stateVisible">
+			android:windowSoftInputMode="adjustResize">
 			<meta-data
 				android:name="android.support.PARENT_ACTIVITY"
 				android:value=".android.navdrawer.NavDrawerActivity"
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java
index 60ed47f5ab..7b9bb80ce2 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java
@@ -39,7 +39,7 @@ import org.briarproject.briar.android.privategroup.conversation.GroupConversatio
 import org.briarproject.briar.android.privategroup.creation.CreateGroupActivity;
 import org.briarproject.briar.android.privategroup.creation.CreateGroupFragment;
 import org.briarproject.briar.android.privategroup.creation.CreateGroupMessageFragment;
-import org.briarproject.briar.android.privategroup.creation.GroupCreateModule;
+import org.briarproject.briar.android.privategroup.creation.CreateGroupModule;
 import org.briarproject.briar.android.privategroup.creation.GroupInviteActivity;
 import org.briarproject.briar.android.privategroup.creation.GroupInviteFragment;
 import org.briarproject.briar.android.privategroup.invitation.GroupInvitationActivity;
@@ -71,7 +71,7 @@ import dagger.Component;
 @Component(
 		modules = {ActivityModule.class, ForumModule.class, SharingModule.class,
 				BlogModule.class, ContactModule.class, GroupListModule.class,
-				GroupCreateModule.class, GroupInvitationModule.class,
+				CreateGroupModule.class, GroupInvitationModule.class,
 				GroupConversationModule.class, GroupMemberModule.class,
 				GroupRevealModule.class},
 		dependencies = AndroidComponent.class)
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/BaseGroupInviteActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/BaseGroupInviteActivity.java
deleted file mode 100644
index 315aed855b..0000000000
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/BaseGroupInviteActivity.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.briarproject.briar.android.privategroup.creation;
-
-import org.briarproject.bramble.api.contact.ContactId;
-import org.briarproject.bramble.api.db.DbException;
-import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
-import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
-import org.briarproject.briar.android.contactselection.ContactSelectorActivity;
-import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
-import org.briarproject.briar.android.sharing.BaseMessageFragment.MessageFragmentListener;
-
-import java.util.Collection;
-
-import javax.inject.Inject;
-
-import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_MSG_LENGTH;
-
-@MethodsNotNullByDefault
-@ParametersNotNullByDefault
-public abstract class BaseGroupInviteActivity
-		extends ContactSelectorActivity implements MessageFragmentListener {
-
-	@Inject
-	CreateGroupController controller;
-
-	@Override
-	public void contactsSelected(Collection<ContactId> contacts) {
-		super.contactsSelected(contacts);
-
-		showNextFragment(new CreateGroupMessageFragment());
-	}
-
-	@Override
-	public boolean onButtonClick(String message) {
-		if (groupId == null)
-			throw new IllegalStateException("GroupId was not initialized");
-		controller.sendInvitation(groupId, contacts, message,
-				new UiResultExceptionHandler<Void, DbException>(this) {
-					@Override
-					public void onResultUi(Void result) {
-						setResult(RESULT_OK);
-						supportFinishAfterTransition();
-					}
-
-					@Override
-					public void onExceptionUi(DbException exception) {
-						setResult(RESULT_CANCELED);
-						handleDbException(exception);
-					}
-				});
-		return true;
-	}
-
-	@Override
-	public int getMaximumMessageLength() {
-		return MAX_GROUP_INVITATION_MSG_LENGTH;
-	}
-
-}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupActivity.java
index 30e80f8298..6cc0c6e577 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupActivity.java
@@ -9,16 +9,20 @@ import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
 import org.briarproject.bramble.api.sync.GroupId;
 import org.briarproject.briar.R;
 import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
 import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
 import org.briarproject.briar.android.privategroup.conversation.GroupActivity;
-import org.briarproject.briar.android.sharing.BaseMessageFragment.MessageFragmentListener;
 
 import javax.annotation.Nullable;
+import javax.inject.Inject;
 
 @MethodsNotNullByDefault
 @ParametersNotNullByDefault
-public class CreateGroupActivity extends BaseGroupInviteActivity implements
-		CreateGroupListener, MessageFragmentListener {
+public class CreateGroupActivity extends BriarActivity
+		implements CreateGroupListener {
+
+	@Inject
+	CreateGroupController controller;
 
 	@Override
 	public void injectActivity(ActivityComponent component) {
@@ -29,32 +33,20 @@ public class CreateGroupActivity extends BaseGroupInviteActivity implements
 	public void onCreate(@Nullable Bundle bundle) {
 		super.onCreate(bundle);
 
+		setContentView(R.layout.activity_fragment_container);
+
 		if (bundle == null) {
 			showInitialFragment(new CreateGroupFragment());
 		}
 	}
 
-	@Override
-	public void onBackPressed() {
-		if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
-			// At this point, the group had been created already,
-			// so don't allow to create it again.
-			openNewGroup();
-			overridePendingTransition(R.anim.screen_old_in,
-					R.anim.screen_new_out);
-		} else {
-			super.onBackPressed();
-		}
-	}
-
 	@Override
 	public void onGroupNameChosen(String name) {
 		controller.createGroup(name,
 				new UiResultExceptionHandler<GroupId, DbException>(this) {
 					@Override
 					public void onResultUi(GroupId g) {
-						groupId = g;
-						switchToContactSelectorFragment(g);
+						openNewGroup(g);
 					}
 
 					@Override
@@ -64,16 +56,10 @@ public class CreateGroupActivity extends BaseGroupInviteActivity implements
 				});
 	}
 
-	private void switchToContactSelectorFragment(GroupId g) {
-		showNextFragment(GroupInviteFragment.newInstance(g));
-	}
-
-	private void openNewGroup() {
+	private void openNewGroup(GroupId g) {
 		Intent i = new Intent(this, GroupActivity.class);
-		i.putExtra(GROUP_ID, groupId.getBytes());
+		i.putExtra(GROUP_ID, g.getBytes());
 		startActivity(i);
-		// finish this activity, so we can't come back to it
 		finish();
 	}
-
 }
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupCreateModule.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupModule.java
similarity index 91%
rename from briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupCreateModule.java
rename to briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupModule.java
index fc51ac8e91..9399958fe8 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupCreateModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupModule.java
@@ -6,7 +6,7 @@ import dagger.Module;
 import dagger.Provides;
 
 @Module
-public class GroupCreateModule {
+public class CreateGroupModule {
 
 	@ActivityScope
 	@Provides
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteActivity.java
index 9f6a092f51..3da66f7cbe 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteActivity.java
@@ -3,25 +3,43 @@ package org.briarproject.briar.android.privategroup.creation;
 import android.content.Intent;
 import android.os.Bundle;
 
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
 import org.briarproject.bramble.api.sync.GroupId;
 import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.contactselection.ContactSelectorActivity;
+import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler;
 import org.briarproject.briar.android.sharing.BaseMessageFragment.MessageFragmentListener;
 
-public class GroupInviteActivity extends BaseGroupInviteActivity
+import java.util.Collection;
+
+import javax.annotation.Nullable;
+import javax.inject.Inject;
+
+import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_MSG_LENGTH;
+
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
+public class GroupInviteActivity extends ContactSelectorActivity
 		implements MessageFragmentListener {
 
+	@Inject
+	CreateGroupController controller;
+
 	@Override
 	public void injectActivity(ActivityComponent component) {
 		component.inject(this);
 	}
 
 	@Override
-	public void onCreate(Bundle bundle) {
+	public void onCreate(@Nullable Bundle bundle) {
 		super.onCreate(bundle);
 
 		Intent i = getIntent();
 		byte[] g = i.getByteArrayExtra(GROUP_ID);
-		if (g == null) throw new IllegalStateException("No GroupId in intent.");
+		if (g == null) throw new IllegalStateException("No GroupId in intent");
 		groupId = new GroupId(g);
 
 		if (bundle == null) {
@@ -29,4 +47,36 @@ public class GroupInviteActivity extends BaseGroupInviteActivity
 		}
 	}
 
+	@Override
+	public void contactsSelected(Collection<ContactId> contacts) {
+		super.contactsSelected(contacts);
+
+		showNextFragment(new CreateGroupMessageFragment());
+	}
+
+	@Override
+	public boolean onButtonClick(String message) {
+		if (groupId == null)
+			throw new IllegalStateException("GroupId was not initialized");
+		controller.sendInvitation(groupId, contacts, message,
+				new UiResultExceptionHandler<Void, DbException>(this) {
+					@Override
+					public void onResultUi(Void result) {
+						setResult(RESULT_OK);
+						supportFinishAfterTransition();
+					}
+
+					@Override
+					public void onExceptionUi(DbException exception) {
+						setResult(RESULT_CANCELED);
+						handleDbException(exception);
+					}
+				});
+		return true;
+	}
+
+	@Override
+	public int getMaximumMessageLength() {
+		return MAX_GROUP_INVITATION_MSG_LENGTH;
+	}
 }
diff --git a/briar-android/src/main/res/menu/group_actions.xml b/briar-android/src/main/res/menu/group_actions.xml
index 2f4315a752..1336c01de3 100644
--- a/briar-android/src/main/res/menu/group_actions.xml
+++ b/briar-android/src/main/res/menu/group_actions.xml
@@ -9,18 +9,18 @@
 		android:title="@string/groups_member_list"
 		app:showAsAction="ifRoom"/>
 
-	<item
-		android:id="@+id/action_group_reveal"
-		android:icon="@drawable/ic_visibility_white"
-		android:title="@string/groups_reveal_contacts"
-		app:showAsAction="ifRoom"/>
-
 	<item
 		android:id="@+id/action_group_invite"
-		android:icon="@drawable/ic_add_white"
+		android:icon="@drawable/social_share_white"
 		android:title="@string/groups_invite_members"
 		app:showAsAction="ifRoom"/>
 
+	<item
+		android:id="@+id/action_group_reveal"
+		android:icon="@drawable/ic_visibility_white"
+		android:title="@string/groups_reveal_contacts"
+		app:showAsAction="never"/>
+
 	<item
 		android:id="@+id/action_group_leave"
 		android:icon="@drawable/action_delete_white"
diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml
index 6e2bbd8eb9..8a652f477c 100644
--- a/briar-android/src/main/res/values/strings.xml
+++ b/briar-android/src/main/res/values/strings.xml
@@ -204,7 +204,7 @@
 
 	<!-- Forums -->
 	<string name="no_forums">You don\'t have any forums yet.\n\nWhy don\'t you create a new one yourself by tapping the + icon at the top?\n\nYou can also ask your contacts to share forums with you.</string>
-	<string name="create_forum_title">New Forum</string>
+	<string name="create_forum_title">Create Forum</string>
 	<string name="choose_forum_hint">Choose a name for your forum</string>
 	<string name="create_forum_button">Create Forum</string>
 	<string name="forum_created_toast">Forum created</string>
-- 
GitLab