From 920f3581fa94d9a53b115c6d3bbcb499231cc484 Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Mon, 17 Apr 2017 16:07:37 -0300
Subject: [PATCH] Show text input permanently in threaded conversations

---
 .../briar/android/forum/ForumActivity.java    |  3 --
 .../conversation/GroupActivity.java           | 13 ++---
 .../android/threaded/ThreadListActivity.java  | 47 +++++--------------
 .../main/res/drawable/chevron48dp_down.xml    |  9 ----
 .../src/main/res/drawable/chevron48dp_up.xml  |  9 ----
 .../main/res/drawable/selector_chevron.xml    |  5 --
 .../src/main/res/menu/forum_actions.xml       |  6 ---
 .../src/main/res/menu/group_actions.xml       |  6 ---
 briar-android/src/main/res/values/color.xml   |  1 -
 briar-android/src/main/res/values/strings.xml |  6 ---
 10 files changed, 18 insertions(+), 87 deletions(-)
 delete mode 100644 briar-android/src/main/res/drawable/chevron48dp_down.xml
 delete mode 100644 briar-android/src/main/res/drawable/chevron48dp_up.xml
 delete mode 100644 briar-android/src/main/res/drawable/selector_chevron.xml

diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java
index 19173ac7fe..2af57aa1a0 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java
@@ -116,9 +116,6 @@ public class ForumActivity extends
 	public boolean onOptionsItemSelected(final MenuItem item) {
 		// Handle presses on the action bar items
 		switch (item.getItemId()) {
-			case R.id.action_forum_compose_post:
-				showTextInput(null);
-				return true;
 			case R.id.action_forum_share:
 				Intent i2 = new Intent(this, ShareForumActivity.class);
 				i2.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
index feaddbec9c..c19aa38a26 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
@@ -37,6 +37,7 @@ import javax.annotation.Nullable;
 import javax.inject.Inject;
 
 import static android.view.View.GONE;
+import static android.view.View.VISIBLE;
 import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_GROUP_INVITE;
 import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_POST_BODY_LENGTH;
 
@@ -50,8 +51,8 @@ public class GroupActivity extends
 	GroupController controller;
 
 	private boolean isCreator, isDissolved = false;
-	private MenuItem writeMenuItem, revealMenuItem, inviteMenuItem,
-			leaveMenuItem, dissolveMenuItem;
+	private MenuItem revealMenuItem, inviteMenuItem, leaveMenuItem,
+			dissolveMenuItem;
 
 	@Override
 	public void injectActivity(ActivityComponent component) {
@@ -139,7 +140,6 @@ public class GroupActivity extends
 		MenuInflater inflater = getMenuInflater();
 		inflater.inflate(R.menu.group_actions, menu);
 
-		writeMenuItem = menu.findItem(R.id.action_group_compose_message);
 		revealMenuItem = menu.findItem(R.id.action_group_reveal);
 		inviteMenuItem = menu.findItem(R.id.action_group_invite);
 		leaveMenuItem = menu.findItem(R.id.action_group_leave);
@@ -152,9 +152,6 @@ public class GroupActivity extends
 	@Override
 	public boolean onOptionsItemSelected(final MenuItem item) {
 		switch (item.getItemId()) {
-			case R.id.action_group_compose_message:
-				showTextInput(null);
-				return true;
 			case R.id.action_group_member_list:
 				Intent i1 = new Intent(this, GroupMemberListActivity.class);
 				i1.putExtra(GROUP_ID, groupId.getBytes());
@@ -205,7 +202,6 @@ public class GroupActivity extends
 
 	private void setGroupEnabled(boolean enabled) {
 		isDissolved = !enabled;
-		if (writeMenuItem != null) writeMenuItem.setVisible(enabled);
 		textInput.setSendButtonEnabled(enabled);
 		list.getRecyclerView().setAlpha(enabled ? 1f : 0.5f);
 
@@ -213,6 +209,8 @@ public class GroupActivity extends
 			textInput.setVisibility(GONE);
 			if (textInput.isKeyboardOpen()) textInput.hideSoftKeyboard();
 			if (textInput.isEmojiDrawerOpen()) textInput.hideEmojiDrawer();
+		} else {
+			textInput.setVisibility(VISIBLE);
 		}
 	}
 
@@ -229,7 +227,6 @@ public class GroupActivity extends
 			leaveMenuItem.setVisible(true);
 			dissolveMenuItem.setVisible(false);
 		}
-		writeMenuItem.setVisible(!isDissolved);
 	}
 
 	private void showLeaveGroupDialog() {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
index 77ef469716..8106be7edb 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
@@ -43,8 +43,6 @@ import javax.inject.Inject;
 import static android.support.design.widget.Snackbar.make;
 import static android.support.v7.widget.RecyclerView.NO_POSITION;
 import static android.support.v7.widget.RecyclerView.SCROLL_STATE_IDLE;
-import static android.view.View.GONE;
-import static android.view.View.VISIBLE;
 import static java.util.logging.Level.INFO;
 import static org.briarproject.briar.android.threaded.ThreadItemAdapter.UnreadCount;
 
@@ -55,7 +53,6 @@ public abstract class ThreadListActivity<G extends NamedGroup, A extends ThreadI
 		implements ThreadListListener<H>, TextInputListener, SharingListener,
 		ThreadItemListener<I> {
 
-	protected static final String KEY_INPUT_VISIBILITY = "inputVisibility";
 	protected static final String KEY_REPLY_ID = "replyId";
 
 	private static final Logger LOG =
@@ -89,7 +86,6 @@ public abstract class ThreadListActivity<G extends NamedGroup, A extends ThreadI
 		getController().setGroupId(groupId);
 
 		textInput = (TextInputView) findViewById(R.id.text_input_container);
-		textInput.setVisibility(GONE);
 		textInput.setListener(this);
 		list = (BriarRecyclerView) findViewById(R.id.list);
 		layoutManager = new LinearLayoutManager(this);
@@ -181,8 +177,7 @@ public abstract class ThreadListActivity<G extends NamedGroup, A extends ThreadI
 							} else {
 								adapter.setItems(items);
 								list.showData();
-								if (replyId != null)
-									adapter.setHighlightedItem(replyId);
+								updateTextInput(replyId);
 							}
 						} else {
 							LOG.info("Concurrent update, reloading");
@@ -231,18 +226,9 @@ public abstract class ThreadListActivity<G extends NamedGroup, A extends ThreadI
 		list.stopPeriodicUpdate();
 	}
 
-	@Override
-	protected void onRestoreInstanceState(Bundle savedInstanceState) {
-		super.onRestoreInstanceState(savedInstanceState);
-		boolean visible = savedInstanceState.getBoolean(KEY_INPUT_VISIBILITY);
-		textInput.setVisibility(visible ? VISIBLE : GONE);
-	}
-
 	@Override
 	protected void onSaveInstanceState(Bundle outState) {
 		super.onSaveInstanceState(outState);
-		boolean visible = textInput.getVisibility() == VISIBLE;
-		outState.putBoolean(KEY_INPUT_VISIBILITY, visible);
 		ThreadItem replyItem = adapter.getHighlightedItem();
 		if (replyItem != null) {
 			outState.putByteArray(KEY_REPLY_ID, replyItem.getId().getBytes());
@@ -262,9 +248,8 @@ public abstract class ThreadListActivity<G extends NamedGroup, A extends ThreadI
 
 	@Override
 	public void onBackPressed() {
-		if (textInput.getVisibility() == VISIBLE) {
-			textInput.setVisibility(GONE);
-			adapter.setHighlightedItem(null);
+		if (adapter.getHighlightedItem() != null) {
+			updateTextInput(null);
 		} else {
 			super.onBackPressed();
 		}
@@ -280,7 +265,7 @@ public abstract class ThreadListActivity<G extends NamedGroup, A extends ThreadI
 
 	@Override
 	public void onReplyClick(final I item) {
-		showTextInput(item);
+		updateTextInput(item.getId());
 		if (textInput.isKeyboardOpen()) {
 			scrollToItemAtTop(item);
 		} else {
@@ -330,20 +315,15 @@ public abstract class ThreadListActivity<G extends NamedGroup, A extends ThreadI
 		snackbar.show();
 	}
 
-	protected void showTextInput(@Nullable I replyItem) {
-		// An animation here would be an overkill because of the keyboard
-		// popping up.
-		// only clear the text when the input container was not visible
-		if (textInput.getVisibility() != VISIBLE) {
-			textInput.setVisibility(VISIBLE);
-			textInput.setText("");
+	private void updateTextInput(@Nullable MessageId replyItemId) {
+		if (replyItemId != null) {
+			textInput.setHint(R.string.forum_message_reply_hint);
+			textInput.requestFocus();
+			textInput.showSoftKeyboard();
+		} else {
+			textInput.setHint(R.string.forum_new_message_hint);
 		}
-		textInput.requestFocus();
-		textInput.showSoftKeyboard();
-		textInput.setHint(replyItem == null ? R.string.forum_new_message_hint :
-				R.string.forum_message_reply_hint);
-		adapter.setHighlightedItem(
-				replyItem == null ? null : replyItem.getId());
+		adapter.setHighlightedItem(replyItemId);
 	}
 
 	@Override
@@ -369,9 +349,8 @@ public abstract class ThreadListActivity<G extends NamedGroup, A extends ThreadI
 				};
 		getController().createAndStoreMessage(text, replyItem, handler);
 		textInput.hideSoftKeyboard();
-		textInput.setVisibility(GONE);
 		textInput.setText("");
-		adapter.setHighlightedItem(null);
+		updateTextInput(null);
 	}
 
 	protected abstract int getMaxBodyLength();
diff --git a/briar-android/src/main/res/drawable/chevron48dp_down.xml b/briar-android/src/main/res/drawable/chevron48dp_down.xml
deleted file mode 100644
index 6f1f305dfa..0000000000
--- a/briar-android/src/main/res/drawable/chevron48dp_down.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportHeight="48.0"
-        android:viewportWidth="48.0">
-	<path
-		android:fillColor="#06b9ff"
-		android:pathData="M9.1,19.3l14.9,11.8l14.9,-11.8l-1.9,-2.4l-13,10.4l-13,-10.4z"/>
-</vector>
diff --git a/briar-android/src/main/res/drawable/chevron48dp_up.xml b/briar-android/src/main/res/drawable/chevron48dp_up.xml
deleted file mode 100644
index 50894206ec..0000000000
--- a/briar-android/src/main/res/drawable/chevron48dp_up.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportHeight="48.0"
-        android:viewportWidth="48.0">
-	<path
-		android:fillColor="#06b9ff"
-		android:pathData="M38.9,28.7l-14.9,-11.8l-14.9,11.8l1.9,2.4l13,-10.4l13,10.4z"/>
-</vector>
diff --git a/briar-android/src/main/res/drawable/selector_chevron.xml b/briar-android/src/main/res/drawable/selector_chevron.xml
deleted file mode 100644
index f3a72a87dd..0000000000
--- a/briar-android/src/main/res/drawable/selector_chevron.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-	<item android:drawable="@drawable/chevron48dp_down" android:state_selected="true"/>
-	<item android:drawable="@drawable/chevron48dp_up"/>
-</selector>
\ No newline at end of file
diff --git a/briar-android/src/main/res/menu/forum_actions.xml b/briar-android/src/main/res/menu/forum_actions.xml
index cd4e4573c5..349f705829 100644
--- a/briar-android/src/main/res/menu/forum_actions.xml
+++ b/briar-android/src/main/res/menu/forum_actions.xml
@@ -3,12 +3,6 @@
 	xmlns:android="http://schemas.android.com/apk/res/android"
 	xmlns:app="http://schemas.android.com/apk/res-auto">
 
-	<item
-		android:id="@+id/action_forum_compose_post"
-		android:icon="@drawable/forum_item_create_white"
-		android:title="@string/forum_compose_post"
-		app:showAsAction="always"/>
-
 	<item
 		android:id="@+id/action_forum_share"
 		android:icon="@drawable/social_share_white"
diff --git a/briar-android/src/main/res/menu/group_actions.xml b/briar-android/src/main/res/menu/group_actions.xml
index a67e732998..2f4315a752 100644
--- a/briar-android/src/main/res/menu/group_actions.xml
+++ b/briar-android/src/main/res/menu/group_actions.xml
@@ -3,12 +3,6 @@
 	xmlns:android="http://schemas.android.com/apk/res/android"
 	xmlns:app="http://schemas.android.com/apk/res-auto">
 
-	<item
-		android:id="@+id/action_group_compose_message"
-		android:icon="@drawable/forum_item_create_white"
-		android:title="@string/groups_compose_message"
-		app:showAsAction="always"/>
-
 	<item
 		android:id="@+id/action_group_member_list"
 		android:icon="@drawable/ic_group_white"
diff --git a/briar-android/src/main/res/values/color.xml b/briar-android/src/main/res/values/color.xml
index daf3f8b3b2..73ad5b8752 100644
--- a/briar-android/src/main/res/values/color.xml
+++ b/briar-android/src/main/res/values/color.xml
@@ -34,7 +34,6 @@
 	<!-- this is needed as preference_category_material layout uses this color as the text color -->
 	<color name="preference_fallback_accent_color">@color/briar_accent</color>
 	<color name="divider">#c1c1c1</color>
-	<color name="default_separator_inverted">#ffffff</color>
 	<color name="menu_background">#FFFFFF</color>
 
 	<color name="spinner_border">#61000000</color> <!-- 38% Black -->
diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml
index 3c8a448830..42d6ba9f20 100644
--- a/briar-android/src/main/res/values/strings.xml
+++ b/briar-android/src/main/res/values/strings.xml
@@ -162,7 +162,6 @@
 	<string name="groups_create_group_invitation_button">Send Invitation</string>
 	<string name="groups_create_group_hint">Add a name for your private group</string>
 	<string name="groups_invitation_sent">Group invitation has been sent</string>
-	<string name="groups_compose_message">Compose Message</string>
 	<string name="groups_message_sent">Message sent</string>
 	<string name="groups_member_list">Member List</string>
 	<string name="groups_invite_members">Invite Members</string>
@@ -216,15 +215,10 @@
 		<item quantity="one">%d post</item>
 		<item quantity="other">%d posts</item>
 	</plurals>
-	<string name="forum_compose_post">New Forum Post</string>
 	<string name="forum_new_entry_posted">Forum entry posted</string>
 	<string name="forum_new_message_hint">New Entry</string>
 	<string name="forum_message_reply_hint">New Reply</string>
 	<string name="btn_reply">Reply</string>
-	<plurals name="message_replies">
-		<item quantity="one">%1$d reply</item>
-		<item quantity="other">%1$d replies</item>
-	</plurals>
 	<string name="forum_leave">Leave Forum</string>
 	<string name="dialog_title_leave_forum">Confirm Leaving Forum</string>
 	<string name="dialog_message_leave_forum">Are you sure that you want to leave this forum? Contacts you have shared this forum with might get cut off from receiving updates for this forum.</string>
-- 
GitLab