diff --git a/res/layout/conversation_activity.xml b/res/layout/conversation_activity.xml
index 1e0caef905..e370aac582 100644
--- a/res/layout/conversation_activity.xml
+++ b/res/layout/conversation_activity.xml
@@ -122,11 +122,10 @@
-
+
diff --git a/res/layout/emoji_drawer_stub.xml b/res/layout/emoji_drawer_stub.xml
new file mode 100644
index 0000000000..72bf99b4f7
--- /dev/null
+++ b/res/layout/emoji_drawer_stub.xml
@@ -0,0 +1,6 @@
+
+
\ No newline at end of file
diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java
index c582df010b..ece8d4462e 100644
--- a/src/org/thoughtcrime/securesms/ConversationActivity.java
+++ b/src/org/thoughtcrime/securesms/ConversationActivity.java
@@ -43,6 +43,7 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.View.OnKeyListener;
+import android.view.ViewStub;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.TextView;
@@ -100,6 +101,7 @@ import org.thoughtcrime.securesms.util.ResUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.whispersystems.libaxolotl.InvalidMessageException;
+import org.whispersystems.libaxolotl.util.guava.Optional;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
@@ -149,7 +151,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
private AttachmentManager attachmentManager;
private BroadcastReceiver securityUpdateReceiver;
private BroadcastReceiver groupUpdateReceiver;
- private EmojiDrawer emojiDrawer;
+ private Optional emojiDrawer;
private EmojiToggle emojiToggle;
private Recipients recipients;
@@ -321,8 +323,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
@Override
public void onBackPressed() {
- if (emojiDrawer.getVisibility() == View.VISIBLE) {
- emojiDrawer.setVisibility(View.GONE);
+ if (emojiDrawer.isPresent() && emojiDrawer.get().getVisibility() == View.VISIBLE) {
+ emojiDrawer.get().setVisibility(View.GONE);
emojiToggle.toggle();
} else {
super.onBackPressed();
@@ -686,7 +688,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
sendButton = (SendButton) findViewById(R.id.send_button);
composeText = (ComposeText) findViewById(R.id.embedded_text_editor);
charactersLeft = (TextView) findViewById(R.id.space_left);
- emojiDrawer = (EmojiDrawer) findViewById(R.id.emoji_drawer);
+ emojiDrawer = Optional.absent();
emojiToggle = (EmojiToggle) findViewById(R.id.emoji_toggle);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
@@ -714,10 +716,15 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
composeText.setOnEditorActionListener(sendButtonListener);
composeText.setOnClickListener(composeKeyPressedListener);
composeText.setOnFocusChangeListener(composeKeyPressedListener);
- emojiDrawer.setComposeEditText(composeText);
emojiToggle.setOnClickListener(new EmojiToggleListener());
}
+ private EmojiDrawer initializeEmojiDrawer() {
+ EmojiDrawer emojiDrawer = (EmojiDrawer)((ViewStub)findViewById(R.id.emoji_drawer_stub)).inflate();
+ emojiDrawer.setComposeEditText(composeText);
+ return emojiDrawer;
+ }
+
private void initializeResources() {
recipients = RecipientFactory.getRecipientsForIds(this, getIntent().getLongArrayExtra(RECIPIENTS_EXTRA), true);
threadId = getIntent().getLongExtra(THREAD_ID_EXTRA, -1);
@@ -1101,13 +1108,16 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
public void onClick(View v) {
InputMethodManager input = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
- if (emojiDrawer.isOpen()) {
+ if (emojiDrawer.isPresent() && emojiDrawer.get().isOpen()) {
input.showSoftInput(composeText, 0);
- emojiDrawer.hide();
+ emojiDrawer.get().hide();
} else {
+ if (!emojiDrawer.isPresent()) {
+ emojiDrawer = Optional.of(initializeEmojiDrawer());
+ }
input.hideSoftInputFromWindow(composeText.getWindowToken(), 0);
- emojiDrawer.show();
+ emojiDrawer.get().show();
}
}
}
@@ -1146,7 +1156,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
@Override
public void onClick(View v) {
- if (emojiDrawer.isOpen()) {
+ if (emojiDrawer.isPresent() && emojiDrawer.get().isOpen()) {
emojiToggle.performClick();
}
}
@@ -1162,7 +1172,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
@Override
public void onFocusChange(View v, boolean hasFocus) {
- if (hasFocus && emojiDrawer.isOpen()) {
+ if (hasFocus && emojiDrawer.isPresent() && emojiDrawer.get().isOpen()) {
emojiToggle.performClick();
}
}