Emoji Support for all user input

All text that can be generated by users will show emoji from the
shipped sprites.

For all messages and posts, the custom emoji keyboard is now available.

This also disables menu actions rather than hiding them and thus
closes #677

Included is a fix for a regression that was not showing the keyboard
automatically in forums and thus
closes #676
This commit is contained in:
Torsten Grote
2016-09-26 17:58:26 -03:00
parent a422c626b3
commit f8e0441de8
42 changed files with 587 additions and 435 deletions

View File

@@ -144,7 +144,7 @@ public class BlogFragment extends BaseFragment implements
writeButton = menu.findItem(R.id.action_write_blog_post);
if (isMyBlog) writeButton.setVisible(true);
deleteButton = menu.findItem(R.id.action_blog_delete);
if (canDeleteBlog) deleteButton.setVisible(true);
if (canDeleteBlog) deleteButton.setEnabled(true);
super.onCreateOptionsMenu(menu, inflater);
}
@@ -196,7 +196,7 @@ public class BlogFragment extends BaseFragment implements
displaySnackbar(R.string.blogs_blog_post_created, true);
loadBlogPosts(true);
} else if (request == REQUEST_SHARE && result == RESULT_OK) {
displaySnackbar(R.string.blogs_sharing_snackbar, true);
displaySnackbar(R.string.blogs_sharing_snackbar, false);
}
}
@@ -261,7 +261,7 @@ public class BlogFragment extends BaseFragment implements
if (blog.isOurs())
showWriteButton();
if (blog.canBeRemoved())
showDeleteButton();
enableDeleteButton();
}
@Override
@@ -287,10 +287,10 @@ public class BlogFragment extends BaseFragment implements
writeButton.setVisible(true);
}
private void showDeleteButton() {
private void enableDeleteButton() {
canDeleteBlog = true;
if (deleteButton != null)
deleteButton.setVisible(true);
deleteButton.setEnabled(true);
}
private void displaySnackbar(int stringId, boolean scroll) {

View File

@@ -5,10 +5,7 @@ import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.ScrollView;
@@ -16,6 +13,8 @@ import org.briarproject.R;
import org.briarproject.android.ActivityComponent;
import org.briarproject.android.controller.handler.UiResultExceptionHandler;
import org.briarproject.android.fragment.BaseFragment;
import org.briarproject.android.view.TextInputView;
import org.briarproject.android.view.TextInputView.TextInputListener;
import org.briarproject.api.db.DbException;
import org.briarproject.api.sync.GroupId;
import org.briarproject.api.sync.MessageId;
@@ -29,7 +28,7 @@ import static android.view.View.VISIBLE;
import static org.briarproject.android.BriarActivity.GROUP_ID;
import static org.briarproject.android.blogs.BasePostPagerFragment.POST_ID;
public class ReblogFragment extends BaseFragment {
public class ReblogFragment extends BaseFragment implements TextInputListener {
public static final String TAG = ReblogFragment.class.getName();
@@ -88,6 +87,7 @@ public class ReblogFragment extends BaseFragment {
false);
ui = new ViewHolder(v);
ui.post.setTransitionName(postId);
ui.input.setSendButtonEnabled(false);
showProgressBar();
return v;
@@ -129,14 +129,8 @@ public class ReblogFragment extends BaseFragment {
ui.post.bindItem(item);
ui.post.hideReblogButton();
ui.publish.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
send();
finish();
}
});
ui.publish.setEnabled(true);
ui.input.setListener(this);
ui.input.setSendButtonEnabled(true);
ui.scrollView.post(new Runnable() {
@Override
public void run() {
@@ -145,7 +139,8 @@ public class ReblogFragment extends BaseFragment {
});
}
private void send() {
@Override
public void onSendClick(String text) {
String comment = getComment();
feedController.repeatPost(item, comment,
new UiResultExceptionHandler<Void, DbException>(listener) {
@@ -159,6 +154,7 @@ public class ReblogFragment extends BaseFragment {
// do nothing, this fragment is gone already
}
});
finish();
}
@Nullable
@@ -170,13 +166,11 @@ public class ReblogFragment extends BaseFragment {
private void showProgressBar() {
ui.progressBar.setVisibility(VISIBLE);
ui.input.setVisibility(GONE);
ui.publish.setVisibility(GONE);
}
private void hideProgressBar() {
ui.progressBar.setVisibility(INVISIBLE);
ui.input.setVisibility(VISIBLE);
ui.publish.setVisibility(VISIBLE);
}
private static class ViewHolder {
@@ -184,15 +178,13 @@ public class ReblogFragment extends BaseFragment {
private final ScrollView scrollView;
private final ProgressBar progressBar;
private final BlogPostViewHolder post;
private final EditText input;
private final Button publish;
private final TextInputView input;
private ViewHolder(View v) {
scrollView = (ScrollView) v.findViewById(R.id.scrollView);
progressBar = (ProgressBar) v.findViewById(R.id.progressBar);
post = new BlogPostViewHolder(v.findViewById(R.id.postLayout));
input = (EditText) v.findViewById(R.id.inputText);
publish = (Button) v.findViewById(R.id.publishButton);
input = (TextInputView) v.findViewById(R.id.inputText);
}
}
}

View File

@@ -6,9 +6,6 @@ import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
@@ -17,6 +14,8 @@ import org.briarproject.R;
import org.briarproject.android.ActivityComponent;
import org.briarproject.android.BriarActivity;
import org.briarproject.android.api.AndroidNotificationManager;
import org.briarproject.android.view.TextInputView;
import org.briarproject.android.view.TextInputView.TextInputListener;
import org.briarproject.api.FormatException;
import org.briarproject.api.blogs.BlogManager;
import org.briarproject.api.blogs.BlogPost;
@@ -39,7 +38,7 @@ import static java.util.logging.Level.WARNING;
import static org.briarproject.api.blogs.BlogConstants.MAX_BLOG_POST_BODY_LENGTH;
public class WriteBlogPostActivity extends BriarActivity
implements OnEditorActionListener {
implements OnEditorActionListener, TextInputListener {
private static final Logger LOG =
Logger.getLogger(WriteBlogPostActivity.class.getName());
@@ -47,8 +46,7 @@ public class WriteBlogPostActivity extends BriarActivity
@Inject
protected AndroidNotificationManager notificationManager;
private EditText bodyInput;
private Button publishButton;
private TextInputView input;
private ProgressBar progressBar;
// Fields that are accessed from background threads must be volatile
@@ -60,6 +58,7 @@ public class WriteBlogPostActivity extends BriarActivity
@Inject
volatile BlogManager blogManager;
@SuppressWarnings("ConstantConditions")
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
@@ -71,8 +70,9 @@ public class WriteBlogPostActivity extends BriarActivity
setContentView(R.layout.activity_write_blog_post);
bodyInput = (EditText) findViewById(R.id.bodyInput);
bodyInput.addTextChangedListener(new TextWatcher() {
input = (TextInputView) findViewById(R.id.bodyInput);
input.setSendButtonEnabled(false);
input.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
@@ -88,14 +88,7 @@ public class WriteBlogPostActivity extends BriarActivity
enableOrDisablePublishButton();
}
});
publishButton = (Button) findViewById(R.id.publishButton);
publishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
publish();
}
});
input.setListener(this);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
}
@@ -130,25 +123,23 @@ public class WriteBlogPostActivity extends BriarActivity
@Override
public boolean onEditorAction(TextView textView, int actionId, KeyEvent e) {
bodyInput.requestFocus();
input.requestFocus();
return true;
}
private void enableOrDisablePublishButton() {
int bodyLength =
StringUtils.toUtf8(bodyInput.getText().toString()).length;
StringUtils.toUtf8(input.getText().toString()).length;
if (bodyLength > 0 && bodyLength <= MAX_BLOG_POST_BODY_LENGTH)
publishButton.setEnabled(true);
input.setSendButtonEnabled(true);
else
publishButton.setEnabled(false);
input.setSendButtonEnabled(false);
}
private void publish() {
// body
String body = bodyInput.getText().toString();
@Override
public void onSendClick(String body) {
// hide publish button, show progress bar
publishButton.setVisibility(GONE);
input.setVisibility(GONE);
progressBar.setVisibility(VISIBLE);
storePost(body);
@@ -192,10 +183,9 @@ public class WriteBlogPostActivity extends BriarActivity
public void run() {
// hide progress bar, show publish button
progressBar.setVisibility(GONE);
publishButton.setVisibility(VISIBLE);
input.setVisibility(VISIBLE);
// TODO show error
}
});
}
}