From 9f804047f56ad207f25c71f52c37ab4eadf26efd Mon Sep 17 00:00:00 2001 From: Jake McGinty Date: Mon, 9 Mar 2015 15:13:13 -0700 Subject: [PATCH] lazily initialize emoji drawer Saves a good amount of inflation time in onCreate for new conversations. Closes #2585 Closes #2636 // FREEBIE --- res/layout/conversation_activity.xml | 11 ++++--- res/layout/emoji_drawer_stub.xml | 6 ++++ .../securesms/ConversationActivity.java | 30 ++++++++++++------- 3 files changed, 31 insertions(+), 16 deletions(-) create mode 100644 res/layout/emoji_drawer_stub.xml 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(); } }