150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby/*
250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * Copyright (C) 2011 The Android Open Source Project
350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby *
450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * Licensed under the Apache License, Version 2.0 (the "License");
550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * you may not use this file except in compliance with the License.
650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * You may obtain a copy of the License at
750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby *
850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby *      http://www.apache.org/licenses/LICENSE-2.0
950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby *
1050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * Unless required by applicable law or agreed to in writing, software
1150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * distributed under the License is distributed on an "AS IS" BASIS,
1250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * See the License for the specific language governing permissions and
1450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * limitations under the License.
1550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby */
1650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
1750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambypackage com.android.cellbroadcastreceiver;
1850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
1950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.content.Context;
2050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.graphics.Typeface;
2150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.graphics.drawable.Drawable;
2250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.text.Spannable;
2350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.text.SpannableStringBuilder;
2450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.text.style.StyleSpan;
2550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.util.AttributeSet;
2650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.view.accessibility.AccessibilityEvent;
2750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.widget.RelativeLayout;
2850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.widget.TextView;
2950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
3050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport java.util.List;
3150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
3250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby/**
3350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * This class manages the view for given conversation.
3450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby */
3550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambypublic class CellBroadcastListItem extends RelativeLayout {
3650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    private static final String TAG = "CellBroadcastListItem";
3750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    private static final boolean DEBUG = false;
3850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
3950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    private CellBroadcastMessage mCbMessage;
4050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
4150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    private TextView mChannelView;
4250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    private TextView mMessageView;
4350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    private TextView mDateView;
4450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
4550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    private static final StyleSpan STYLE_BOLD = new StyleSpan(Typeface.BOLD);
4650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
4750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    public CellBroadcastListItem(Context context) {
4850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        super(context);
4950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
5050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
5150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    public CellBroadcastListItem(Context context, AttributeSet attrs) {
5250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        super(context, attrs);
5350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
5450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
5550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    CellBroadcastMessage getMessage() {
5650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        return mCbMessage;
5750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
5850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
5950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    @Override
6050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    protected void onFinishInflate() {
6150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        super.onFinishInflate();
6250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
6350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mChannelView = (TextView) findViewById(R.id.channel);
6450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mDateView = (TextView) findViewById(R.id.date);
6550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mMessageView = (TextView) findViewById(R.id.message);
6650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
6750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
6850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    /**
6950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby     * Only used for header binding.
7050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby     * @param message the message contents to bind
7150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby     */
7250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    public void bind(CellBroadcastMessage message) {
7350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mCbMessage = message;
7450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
7550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        Drawable background = message.isRead() ?
7650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby                getResources().getDrawable(R.drawable.list_item_background_read) :
7750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby                getResources().getDrawable(R.drawable.list_item_background_unread);
7850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
7950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        setBackgroundDrawable(background);
8050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
8150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mChannelView.setText(message.getDialogTitleResource());
8250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mDateView.setText(message.getDateString(getContext()));
8350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mMessageView.setText(formatMessage(message));
8450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
8550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
8650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    private static CharSequence formatMessage(CellBroadcastMessage message) {
8750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        String body = message.getMessageBody();
8850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
8950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        SpannableStringBuilder buf = new SpannableStringBuilder(body);
9050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
9150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        // Unread messages are shown in bold
9250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        if (!message.isRead()) {
9350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby            buf.setSpan(STYLE_BOLD, 0, buf.length(),
9450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby                    Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
9550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        }
9650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        return buf;
9750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
9850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
9950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    @Override
10050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
10150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        // Speak the date first, then channel name, then message body
10250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        event.getText().add(mCbMessage.getSpokenDateString(getContext()));
10350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mChannelView.dispatchPopulateAccessibilityEvent(event);
10450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mMessageView.dispatchPopulateAccessibilityEvent(event);
10550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        return true;
10650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
10750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby}
108