avoid excessive attribute resolution

Closes #3729
// FREEBIE
This commit is contained in:
Jake McGinty 2015-07-20 13:40:57 -07:00 committed by Moxie Marlinspike
parent 83919c087d
commit 580a3182ab

View File

@ -23,6 +23,7 @@ import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.annotation.NonNull;
import android.text.TextUtils;
@ -100,6 +101,10 @@ public class ConversationItem extends LinearLayout {
private Button mmsDownloadButton;
private TextView mmsDownloadingLabel;
private int defaultBubbleColor;
private Drawable selectedBackground;
private Drawable normalBackground;
private final MmsDownloadClickListener mmsDownloadClickListener = new MmsDownloadClickListener();
private final MmsPreferencesClickListener mmsPreferencesClickListener = new MmsPreferencesClickListener();
private final ClickListener clickListener = new ClickListener();
@ -119,6 +124,7 @@ public class ConversationItem extends LinearLayout {
protected void onFinishInflate() {
super.onFinishInflate();
initializeAttributes();
ViewGroup pendingIndicatorStub = (ViewGroup) findViewById(R.id.pending_indicator_stub);
if (pendingIndicatorStub != null) {
@ -181,6 +187,18 @@ public class ConversationItem extends LinearLayout {
}
}
private void initializeAttributes() {
final int[] attributes = new int[] {R.attr.conversation_item_bubble_background,
R.attr.conversation_list_item_background_selected,
R.attr.conversation_item_background};
final TypedArray attrs = context.obtainStyledAttributes(attributes);
defaultBubbleColor = attrs.getColor(0, Color.WHITE);
selectedBackground = attrs.getDrawable(1);
normalBackground = attrs.getDrawable(2);
attrs.recycle();
}
public void unbind() {
}
@ -191,12 +209,8 @@ public class ConversationItem extends LinearLayout {
/// MessageRecord Attribute Parsers
private void setBubbleState(MessageRecord messageRecord) {
int[] attributes = new int[]{R.attr.conversation_item_bubble_background};
TypedArray colors = context.obtainStyledAttributes(attributes);
int defaultColor = colors.getColor(0, Color.WHITE);
if (messageRecord.isOutgoing()) {
bodyBubble.getBackground().setColorFilter(defaultColor, PorterDuff.Mode.MULTIPLY);
bodyBubble.getBackground().setColorFilter(defaultBubbleColor, PorterDuff.Mode.MULTIPLY);
} else {
bodyBubble.getBackground().setColorFilter(messageRecord.getIndividualRecipient()
.getColor()
@ -204,22 +218,14 @@ public class ConversationItem extends LinearLayout {
PorterDuff.Mode.MULTIPLY);
}
colors.recycle();
}
private void setSelectionBackgroundDrawables(MessageRecord messageRecord) {
int[] attributes = new int[]{R.attr.conversation_list_item_background_selected,
R.attr.conversation_item_background};
TypedArray drawables = context.obtainStyledAttributes(attributes);
if (batchSelected.contains(messageRecord)) {
setBackgroundDrawable(drawables.getDrawable(0));
setBackgroundDrawable(selectedBackground);
} else {
setBackgroundDrawable(drawables.getDrawable(1));
setBackgroundDrawable(normalBackground);
}
drawables.recycle();
}
private boolean hasConversationBubble(MessageRecord messageRecord) {