ConversationListItem.java revision b8cadac68b0e449a7b2139fe3a0a4352873bcee5
172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/* 272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2008 Esmertec AG. 372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * you may not use this file except in compliance with the License. 772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * You may obtain a copy of the License at 872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 1072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 1172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * See the License for the specific language governing permissions and 1572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * limitations under the License. 1672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 1772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 1872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpackage com.android.mms.ui; 1972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 2072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.R; 2172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 2272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.Context; 2372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.graphics.Typeface; 2472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.graphics.drawable.Drawable; 2572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 2672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.os.Handler; 2772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.text.Spannable; 2872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.text.SpannableStringBuilder; 2972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.text.style.ForegroundColorSpan; 30b8cadac68b0e449a7b2139fe3a0a4352873bcee5Tom Taylorimport android.text.style.StyleSpan; 3172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.text.style.TextAppearanceSpan; 3272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.AttributeSet; 3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.Log; 3472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.View; 3572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.Window; 3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.ImageView; 3772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.RelativeLayout; 3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.TextView; 3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/** 4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * This class manages the view for given conversation. 4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class ConversationHeaderView extends RelativeLayout { 4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final String TAG = "ConversationHeaderView"; 4572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final boolean DEBUG = false; 4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private TextView mSubjectView; 4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private TextView mFromView; 4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private TextView mDateView; 5072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private View mAttachmentView; 5172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private View mErrorIndicator; 5272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private ImageView mPresenceView; 5372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // For posting UI update Runnables from other threads: 5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private Handler mHandler = new Handler(); 5672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Access to mConversationHeader is guarded by mConversationHeaderLock. 5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final Object mConversationHeaderLock = new Object(); 5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private ConversationHeader mConversationHeader; 60b8cadac68b0e449a7b2139fe3a0a4352873bcee5Tom Taylor 61b8cadac68b0e449a7b2139fe3a0a4352873bcee5Tom Taylor private static final StyleSpan STYLE_BOLD = new StyleSpan(Typeface.BOLD); 6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public ConversationHeaderView(Context context) { 6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super(context); 6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public ConversationHeaderView(Context context, AttributeSet attrs) { 6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super(context, attrs); 6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onFinishInflate() { 7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onFinishInflate(); 7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mFromView = (TextView) findViewById(R.id.from); 7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSubjectView = (TextView) findViewById(R.id.subject); 7772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDateView = (TextView) findViewById(R.id.date); 7972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mAttachmentView = findViewById(R.id.attachment); 8072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mErrorIndicator = findViewById(R.id.error); 8172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mPresenceView = (ImageView) findViewById(R.id.presence); 8272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 8372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void setPresenceIcon(int iconId) { 8572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (iconId == 0) { 8672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mPresenceView.setVisibility(View.GONE); 8772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 8872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mPresenceView.setImageResource(iconId); 8972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mPresenceView.setVisibility(View.VISIBLE); 9072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public ConversationHeader getConversationHeader() { 9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project synchronized (mConversationHeaderLock) { 9572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mConversationHeader; 9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void setConversationHeader(ConversationHeader header) { 10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project synchronized (mConversationHeaderLock) { 10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mConversationHeader = header; 10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 10572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 10672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Only used for header binding. 10772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 10872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void bind(String title, String explain) { 10972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mFromView.setText(title); 11072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSubjectView.setText(explain); 11172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 11272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 11372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private CharSequence formatMessage(ConversationHeader ch) { 11472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project final int size = android.R.style.TextAppearance_Small; 11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project final int color = android.R.styleable.Theme_textColorSecondary; 11672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project String from = ch.getFrom(); 11772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (from == null) { 11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // The temporary text users see while the names of contacts are loading. 11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // TODO: evaluate a better or prettier solution for this? 12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project from = "..."; 12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 122b8cadac68b0e449a7b2139fe3a0a4352873bcee5Tom Taylor 12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SpannableStringBuilder buf = new SpannableStringBuilder(from); 12472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (ch.getMessageCount() > 1) { 12672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project buf.append(" (" + ch.getMessageCount() + ") "); 12772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 12872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int before = buf.length(); 13072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (ch.hasDraft()) { 13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project buf.append(" "); 13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project buf.append(mContext.getResources().getString(R.string.has_draft)); 13372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project buf.setSpan(new TextAppearanceSpan(mContext, size, color), before, 13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project buf.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project buf.setSpan(new ForegroundColorSpan( 13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mContext.getResources().getColor(R.drawable.text_color_red)), 13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project before, buf.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 13872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 139b8cadac68b0e449a7b2139fe3a0a4352873bcee5Tom Taylor 140b8cadac68b0e449a7b2139fe3a0a4352873bcee5Tom Taylor // Unread messages are shown in bold 141b8cadac68b0e449a7b2139fe3a0a4352873bcee5Tom Taylor if (!ch.isRead()) { 142b8cadac68b0e449a7b2139fe3a0a4352873bcee5Tom Taylor buf.setSpan(STYLE_BOLD, 0, buf.length(), 143b8cadac68b0e449a7b2139fe3a0a4352873bcee5Tom Taylor Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 144b8cadac68b0e449a7b2139fe3a0a4352873bcee5Tom Taylor } 14572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return buf; 14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 14872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Called by another thread that loaded an updated 14972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // ConversationHeader for us. Note, however, that this view 15072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // might've been re-used for a different header in the meantime, 15172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // so we have to double-check that we still want this header. 15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onHeaderLoaded(final ConversationHeader newHeader) { 15372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project synchronized (mConversationHeaderLock) { 15472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mConversationHeader != newHeader) { 15572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // The user scrolled away before the item loaded and 15672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // this view has been repurposed. 15772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 15872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 15972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // TODO: as an optimization, send a message to mHandler instead 16172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // of posting a Runnable. 16272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mHandler.post(new Runnable() { 16372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void run() { 16472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project synchronized (mConversationHeaderLock) { 16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mConversationHeader == newHeader) { 16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mFromView.setText(formatMessage(newHeader)); 16772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project setPresenceIcon(newHeader.getPresenceResourceId()); 16872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }); 17372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public final void bind(Context context, final ConversationHeader ch) { 17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (DEBUG) Log.v(TAG, "bind()"); 17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ConversationHeader oldHeader = getConversationHeader(); 18072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project setConversationHeader(ch); 18172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 182836945de572ac80fd6f6a7bf59036d4cce801410The Android Open Source Project LayoutParams attachmentLayout = (LayoutParams)mAttachmentView.getLayoutParams(); 18372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project boolean hasError = ch.hasError(); 18472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // When there's an error icon, the attachment icon is left of the error icon. 18572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // When there is not an error icon, the attachment icon is left of the date text. 18672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // As far as I know, there's no way to specify that relationship in xml. 18772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (hasError) { 188836945de572ac80fd6f6a7bf59036d4cce801410The Android Open Source Project attachmentLayout.addRule(RelativeLayout.LEFT_OF, R.id.error); 18972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 190836945de572ac80fd6f6a7bf59036d4cce801410The Android Open Source Project attachmentLayout.addRule(RelativeLayout.LEFT_OF, R.id.date); 19172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 193836945de572ac80fd6f6a7bf59036d4cce801410The Android Open Source Project boolean hasAttachment = ch.hasAttachment(); 194836945de572ac80fd6f6a7bf59036d4cce801410The Android Open Source Project mAttachmentView.setVisibility(hasAttachment ? VISIBLE : GONE); 19572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 19672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Date 19772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDateView.setText(ch.getDate()); 19872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 19972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // From. 20072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mFromView.setText(formatMessage(ch)); 20172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // The From above may be incomplete (still loading), so we register ourselves 20372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // as a callback later to get woken up in onHeaderLoaded() when it changes. 20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (ch.getFrom() == null) { 20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ch.setWaitingView(this); 20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Subject 20972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSubjectView.setText(ch.getSubject()); 210836945de572ac80fd6f6a7bf59036d4cce801410The Android Open Source Project LayoutParams subjectLayout = (LayoutParams)mSubjectView.getLayoutParams(); 211836945de572ac80fd6f6a7bf59036d4cce801410The Android Open Source Project // We have to make the subject left of whatever optional items are shown on the right. 212836945de572ac80fd6f6a7bf59036d4cce801410The Android Open Source Project subjectLayout.addRule(RelativeLayout.LEFT_OF, hasAttachment ? R.id.attachment : 213836945de572ac80fd6f6a7bf59036d4cce801410The Android Open Source Project (hasError ? R.id.error : R.id.date)); 21472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 21572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Transmission error indicator. 21672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mErrorIndicator.setVisibility(hasError ? VISIBLE : GONE); 21772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 21872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 219