From e6def700302a2cea6623a4771609b0d7d4889715 Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Wed, 19 Oct 2016 11:49:27 -0200
Subject: [PATCH] Pre-address potential review issues

---
 .../android/contact/ConversationActivity.java   |  1 +
 .../IntroductionMessageFragment.java            |  6 ++++--
 .../creation/CreateGroupActivity.java           |  8 +++++++-
 .../creation/CreateGroupMessageFragment.java    |  5 ++++-
 .../android/sharing/BaseMessageFragment.java    | 17 +++++++++++++++--
 .../android/sharing/ShareBlogActivity.java      |  8 +++++++-
 .../sharing/ShareBlogMessageFragment.java       |  3 +++
 .../android/sharing/ShareForumActivity.java     |  8 +++++++-
 .../sharing/ShareForumMessageFragment.java      |  3 +++
 .../android/threaded/ThreadListActivity.java    |  1 +
 .../android/view/TextInputView.java             |  1 -
 11 files changed, 52 insertions(+), 9 deletions(-)

diff --git a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
index e52bc4a89d..a5496d9c70 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
@@ -623,6 +623,7 @@ public class ConversationActivity extends BriarActivity
 		long timestamp = System.currentTimeMillis();
 		timestamp = Math.max(timestamp, getMinTimestampForNewMessage());
 		createMessage(StringUtils.toUtf8(text), timestamp);
+		textInputView.setText("");
 	}
 
 	private long getMinTimestampForNewMessage() {
diff --git a/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java b/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java
index 019aff6899..f5c9c32a63 100644
--- a/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java
+++ b/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java
@@ -14,6 +14,7 @@ import org.briarproject.R;
 import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.fragment.BaseFragment;
 import org.briarproject.android.view.TextInputView;
+import org.briarproject.android.view.TextInputView.TextInputListener;
 import org.briarproject.api.FormatException;
 import org.briarproject.api.contact.Contact;
 import org.briarproject.api.contact.ContactId;
@@ -37,7 +38,7 @@ import static java.util.logging.Level.WARNING;
 import static org.briarproject.api.introduction.IntroductionConstants.MAX_INTRODUCTION_MESSAGE_LENGTH;
 
 public class IntroductionMessageFragment extends BaseFragment
-		implements TextInputView.TextInputListener {
+		implements TextInputListener {
 
 	public static final String TAG =
 			IntroductionMessageFragment.class.getName();
@@ -56,7 +57,8 @@ public class IntroductionMessageFragment extends BaseFragment
 	@Inject
 	protected volatile IntroductionManager introductionManager;
 
-	public static IntroductionMessageFragment newInstance(int contactId1, int contactId2) {
+	public static IntroductionMessageFragment newInstance(int contactId1,
+			int contactId2) {
 		Bundle args = new Bundle();
 		args.putInt(CONTACT_ID_1, contactId1);
 		args.putInt(CONTACT_ID_2, contactId2);
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupActivity.java b/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupActivity.java
index 991cdf5265..c2bba1a65c 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupActivity.java
+++ b/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupActivity.java
@@ -24,12 +24,13 @@ import javax.inject.Inject;
 
 import static android.support.v4.app.ActivityOptionsCompat.makeCustomAnimation;
 import static android.widget.Toast.LENGTH_SHORT;
+import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
 
 public class CreateGroupActivity extends ContactSelectorActivity implements
 		CreateGroupListener, MessageFragmentListener {
 
 	@Inject
-	protected CreateGroupController controller;
+	CreateGroupController controller;
 
 	@Override
 	public void injectActivity(ActivityComponent component) {
@@ -144,6 +145,11 @@ public class CreateGroupActivity extends ContactSelectorActivity implements
 		return true;
 	}
 
+	@Override
+	public int getMaximumMessageLength() {
+		return MAX_MESSAGE_BODY_LENGTH;
+	}
+
 	private void openNewGroup() {
 		Intent i = new Intent(this, GroupActivity.class);
 		i.putExtra(GROUP_ID, groupId.getBytes());
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupMessageFragment.java b/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupMessageFragment.java
index d2a6600d49..a261ce0167 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupMessageFragment.java
+++ b/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupMessageFragment.java
@@ -1,21 +1,24 @@
 package org.briarproject.android.privategroup.creation;
 
+import android.support.annotation.StringRes;
+
 import org.briarproject.R;
 import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.sharing.BaseMessageFragment;
 
-
 public class CreateGroupMessageFragment extends BaseMessageFragment {
 
 	private final static String TAG =
 			CreateGroupMessageFragment.class.getName();
 
 	@Override
+	@StringRes
 	protected int getButtonText() {
 		return R.string.groups_create_group_invitation_button;
 	}
 
 	@Override
+	@StringRes
 	protected int getHintText() {
 		return R.string.forum_share_message;
 	}
diff --git a/briar-android/src/org/briarproject/android/sharing/BaseMessageFragment.java b/briar-android/src/org/briarproject/android/sharing/BaseMessageFragment.java
index 251846f644..b988c09445 100644
--- a/briar-android/src/org/briarproject/android/sharing/BaseMessageFragment.java
+++ b/briar-android/src/org/briarproject/android/sharing/BaseMessageFragment.java
@@ -3,6 +3,7 @@ package org.briarproject.android.sharing;
 import android.content.Context;
 import android.os.Bundle;
 import android.support.annotation.StringRes;
+import android.support.design.widget.Snackbar;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -11,6 +12,9 @@ import org.briarproject.R;
 import org.briarproject.android.fragment.BaseFragment;
 import org.briarproject.android.view.LargeTextInputView;
 import org.briarproject.android.view.TextInputView.TextInputListener;
+import org.briarproject.util.StringUtils;
+
+import static android.support.design.widget.Snackbar.LENGTH_SHORT;
 
 import static org.briarproject.api.sharing.SharingConstants.MAX_INVITATION_MESSAGE_LENGTH;
 import static org.briarproject.util.StringUtils.truncateUtf8;
@@ -46,8 +50,10 @@ public abstract class BaseMessageFragment extends BaseFragment
 		listener.setTitle(res);
 	}
 
-	protected abstract @StringRes int getButtonText();
-	protected abstract @StringRes int getHintText();
+	@StringRes
+	protected abstract int getButtonText();
+	@StringRes
+	protected abstract int getHintText();
 
 	@Override
 	public void onStart() {
@@ -57,6 +63,11 @@ public abstract class BaseMessageFragment extends BaseFragment
 
 	@Override
 	public void onSendClick(String msg) {
+		if (StringUtils.isTooLong(msg, listener.getMaximumMessageLength())) {
+			Snackbar.make(message, R.string.text_too_long, LENGTH_SHORT).show();
+			return;
+		}
+
 		// disable button to prevent accidental double actions
 		message.setSendButtonEnabled(false);
 		message.hideSoftKeyboard();
@@ -77,6 +88,8 @@ public abstract class BaseMessageFragment extends BaseFragment
 		/** Returns true when the button click has been consumed. */
 		boolean onButtonClick(String message);
 
+		int getMaximumMessageLength();
+
 	}
 
 }
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java b/briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java
index d4ad59a6a7..7d5cdeef3e 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java
+++ b/briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java
@@ -10,11 +10,13 @@ import org.briarproject.api.sync.GroupId;
 
 import javax.inject.Inject;
 
+import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
+
 public class ShareBlogActivity extends ShareActivity {
 
 	// Fields that are accessed from background threads must be volatile
 	@Inject
-	protected volatile BlogSharingManager blogSharingManager;
+	volatile BlogSharingManager blogSharingManager;
 
 	@Override
 	BaseMessageFragment getMessageFragment() {
@@ -42,4 +44,8 @@ public class ShareBlogActivity extends ShareActivity {
 		return R.string.blogs_sharing_error;
 	}
 
+	@Override
+	public int getMaximumMessageLength() {
+		return MAX_MESSAGE_BODY_LENGTH;
+	}
 }
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareBlogMessageFragment.java b/briar-android/src/org/briarproject/android/sharing/ShareBlogMessageFragment.java
index 6d4dfb7b26..ccee4d8fec 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareBlogMessageFragment.java
+++ b/briar-android/src/org/briarproject/android/sharing/ShareBlogMessageFragment.java
@@ -1,6 +1,7 @@
 package org.briarproject.android.sharing;
 
 import android.os.Bundle;
+import android.support.annotation.StringRes;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -25,11 +26,13 @@ public class ShareBlogMessageFragment extends BaseMessageFragment {
 	}
 
 	@Override
+	@StringRes
 	protected int getButtonText() {
 		return R.string.blogs_sharing_button;
 	}
 
 	@Override
+	@StringRes
 	protected int getHintText() {
 		return R.string.forum_share_message;
 	}
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java b/briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java
index 89093a2b0b..492e3615b2 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java
+++ b/briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java
@@ -10,11 +10,13 @@ import org.briarproject.api.sync.GroupId;
 
 import javax.inject.Inject;
 
+import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
+
 public class ShareForumActivity extends ShareActivity {
 
 	// Fields that are accessed from background threads must be volatile
 	@Inject
-	protected volatile ForumSharingManager forumSharingManager;
+	volatile ForumSharingManager forumSharingManager;
 
 	@Override
 	BaseMessageFragment getMessageFragment() {
@@ -42,4 +44,8 @@ public class ShareForumActivity extends ShareActivity {
 		return R.string.forum_share_error;
 	}
 
+	@Override
+	public int getMaximumMessageLength() {
+		return MAX_MESSAGE_BODY_LENGTH;
+	}
 }
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareForumMessageFragment.java b/briar-android/src/org/briarproject/android/sharing/ShareForumMessageFragment.java
index 7824567a3d..a3faeb630d 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareForumMessageFragment.java
+++ b/briar-android/src/org/briarproject/android/sharing/ShareForumMessageFragment.java
@@ -1,6 +1,7 @@
 package org.briarproject.android.sharing;
 
 import android.os.Bundle;
+import android.support.annotation.StringRes;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -25,11 +26,13 @@ public class ShareForumMessageFragment extends BaseMessageFragment {
 	}
 
 	@Override
+	@StringRes
 	protected int getButtonText() {
 		return R.string.forum_share_button;
 	}
 
 	@Override
+	@StringRes
 	protected int getHintText() {
 		return R.string.forum_share_message;
 	}
diff --git a/briar-android/src/org/briarproject/android/threaded/ThreadListActivity.java b/briar-android/src/org/briarproject/android/threaded/ThreadListActivity.java
index 6a1ec4883d..a8eefd250f 100644
--- a/briar-android/src/org/briarproject/android/threaded/ThreadListActivity.java
+++ b/briar-android/src/org/briarproject/android/threaded/ThreadListActivity.java
@@ -253,6 +253,7 @@ public abstract class ThreadListActivity<G extends NamedGroup, I extends ThreadI
 				replyItem != null ? replyItem.getId() : null, handler);
 		textInput.hideSoftKeyboard();
 		textInput.setVisibility(GONE);
+		textInput.setText("");
 		adapter.setReplyItem(null);
 	}
 
diff --git a/briar-android/src/org/briarproject/android/view/TextInputView.java b/briar-android/src/org/briarproject/android/view/TextInputView.java
index dade999a08..ff75c84bfd 100644
--- a/briar-android/src/org/briarproject/android/view/TextInputView.java
+++ b/briar-android/src/org/briarproject/android/view/TextInputView.java
@@ -101,7 +101,6 @@ public class TextInputView extends KeyboardAwareLinearLayout
 			public void onClick(View v) {
 				if (listener != null) {
 					listener.onSendClick(ui.editText.getText().toString());
-					ui.editText.setText("");
 				}
 			}
 		});
-- 
GitLab