lazily initialize emoji drawer

Saves a good amount of inflation time in onCreate for new conversations.

Closes #2585
Closes #2636

// FREEBIE
This commit is contained in:
Jake McGinty 2015-03-09 15:13:13 -07:00 committed by Moxie Marlinspike
parent a625727853
commit 9f804047f5
3 changed files with 31 additions and 16 deletions

View File

@ -122,11 +122,10 @@
</LinearLayout> </LinearLayout>
</RelativeLayout> </RelativeLayout>
<org.thoughtcrime.securesms.components.EmojiDrawer <ViewStub android:id="@+id/emoji_drawer_stub"
android:id="@+id/emoji_drawer" android:inflatedId="@+id/emoji_drawer"
android:visibility="gone" android:layout="@layout/emoji_drawer_stub"
android:layout_weight="1.1" android:layout_width="match_parent"
android:layout_width="fill_parent" android:layout_height="wrap_content" />
android:layout_height="wrap_content"/>
</LinearLayout> </LinearLayout>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<org.thoughtcrime.securesms.components.EmojiDrawer
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1.1" />

View File

@ -43,6 +43,7 @@ import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener; import android.view.View.OnFocusChangeListener;
import android.view.View.OnKeyListener; import android.view.View.OnKeyListener;
import android.view.ViewStub;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.TextView; 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.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
import org.whispersystems.libaxolotl.InvalidMessageException; import org.whispersystems.libaxolotl.InvalidMessageException;
import org.whispersystems.libaxolotl.util.guava.Optional;
import java.io.IOException; import java.io.IOException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
@ -149,7 +151,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
private AttachmentManager attachmentManager; private AttachmentManager attachmentManager;
private BroadcastReceiver securityUpdateReceiver; private BroadcastReceiver securityUpdateReceiver;
private BroadcastReceiver groupUpdateReceiver; private BroadcastReceiver groupUpdateReceiver;
private EmojiDrawer emojiDrawer; private Optional<EmojiDrawer> emojiDrawer;
private EmojiToggle emojiToggle; private EmojiToggle emojiToggle;
private Recipients recipients; private Recipients recipients;
@ -321,8 +323,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (emojiDrawer.getVisibility() == View.VISIBLE) { if (emojiDrawer.isPresent() && emojiDrawer.get().getVisibility() == View.VISIBLE) {
emojiDrawer.setVisibility(View.GONE); emojiDrawer.get().setVisibility(View.GONE);
emojiToggle.toggle(); emojiToggle.toggle();
} else { } else {
super.onBackPressed(); super.onBackPressed();
@ -686,7 +688,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
sendButton = (SendButton) findViewById(R.id.send_button); sendButton = (SendButton) findViewById(R.id.send_button);
composeText = (ComposeText) findViewById(R.id.embedded_text_editor); composeText = (ComposeText) findViewById(R.id.embedded_text_editor);
charactersLeft = (TextView) findViewById(R.id.space_left); charactersLeft = (TextView) findViewById(R.id.space_left);
emojiDrawer = (EmojiDrawer) findViewById(R.id.emoji_drawer); emojiDrawer = Optional.absent();
emojiToggle = (EmojiToggle) findViewById(R.id.emoji_toggle); emojiToggle = (EmojiToggle) findViewById(R.id.emoji_toggle);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
@ -714,10 +716,15 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
composeText.setOnEditorActionListener(sendButtonListener); composeText.setOnEditorActionListener(sendButtonListener);
composeText.setOnClickListener(composeKeyPressedListener); composeText.setOnClickListener(composeKeyPressedListener);
composeText.setOnFocusChangeListener(composeKeyPressedListener); composeText.setOnFocusChangeListener(composeKeyPressedListener);
emojiDrawer.setComposeEditText(composeText);
emojiToggle.setOnClickListener(new EmojiToggleListener()); 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() { private void initializeResources() {
recipients = RecipientFactory.getRecipientsForIds(this, getIntent().getLongArrayExtra(RECIPIENTS_EXTRA), true); recipients = RecipientFactory.getRecipientsForIds(this, getIntent().getLongArrayExtra(RECIPIENTS_EXTRA), true);
threadId = getIntent().getLongExtra(THREAD_ID_EXTRA, -1); threadId = getIntent().getLongExtra(THREAD_ID_EXTRA, -1);
@ -1101,13 +1108,16 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
public void onClick(View v) { public void onClick(View v) {
InputMethodManager input = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager input = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if (emojiDrawer.isOpen()) { if (emojiDrawer.isPresent() && emojiDrawer.get().isOpen()) {
input.showSoftInput(composeText, 0); input.showSoftInput(composeText, 0);
emojiDrawer.hide(); emojiDrawer.get().hide();
} else { } else {
if (!emojiDrawer.isPresent()) {
emojiDrawer = Optional.of(initializeEmojiDrawer());
}
input.hideSoftInputFromWindow(composeText.getWindowToken(), 0); input.hideSoftInputFromWindow(composeText.getWindowToken(), 0);
emojiDrawer.show(); emojiDrawer.get().show();
} }
} }
} }
@ -1146,7 +1156,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (emojiDrawer.isOpen()) { if (emojiDrawer.isPresent() && emojiDrawer.get().isOpen()) {
emojiToggle.performClick(); emojiToggle.performClick();
} }
} }
@ -1162,7 +1172,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
@Override @Override
public void onFocusChange(View v, boolean hasFocus) { public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus && emojiDrawer.isOpen()) { if (hasFocus && emojiDrawer.isPresent() && emojiDrawer.get().isOpen()) {
emojiToggle.performClick(); emojiToggle.performClick();
} }
} }