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>
</RelativeLayout>
<org.thoughtcrime.securesms.components.EmojiDrawer
android:id="@+id/emoji_drawer"
android:visibility="gone"
android:layout_weight="1.1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<ViewStub android:id="@+id/emoji_drawer_stub"
android:inflatedId="@+id/emoji_drawer"
android:layout="@layout/emoji_drawer_stub"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</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.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> 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();
}
}