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;
20da5c415f6d0999131e93384b5fb90422ada8e4daJake Hambyimport android.graphics.Typeface;
2150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.graphics.drawable.Drawable;
22da5c415f6d0999131e93384b5fb90422ada8e4daJake Hambyimport android.telephony.CellBroadcastMessage;
2350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.text.Spannable;
2450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.text.SpannableStringBuilder;
25a93243d13ef0c0b29d871d483642e39c01db7c26Jake Hambyimport android.text.style.StyleSpan;
2650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.util.AttributeSet;
2750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.view.accessibility.AccessibilityEvent;
2850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.widget.RelativeLayout;
2950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.widget.TextView;
3050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
3150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby/**
3200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * This class manages the list item view for a single alert.
3350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby */
3450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambypublic class CellBroadcastListItem extends RelativeLayout {
3550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
3650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    private CellBroadcastMessage mCbMessage;
3750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
3850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    private TextView mChannelView;
3950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    private TextView mMessageView;
4050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    private TextView mDateView;
411820c019a79ad2c50e3c3e4bf18155d4d3dc7967Jack Yu    private Context mContext;
4250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
4350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    public CellBroadcastListItem(Context context, AttributeSet attrs) {
4450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        super(context, attrs);
451820c019a79ad2c50e3c3e4bf18155d4d3dc7967Jack Yu        mContext = context;
4650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
4750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
4850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    CellBroadcastMessage getMessage() {
4950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        return mCbMessage;
5050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
5150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
5250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    @Override
5350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    protected void onFinishInflate() {
5450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        super.onFinishInflate();
5550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
5650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mChannelView = (TextView) findViewById(R.id.channel);
5750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mDateView = (TextView) findViewById(R.id.date);
5850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mMessageView = (TextView) findViewById(R.id.message);
5950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
6050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
6150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    /**
6250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby     * Only used for header binding.
6350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby     * @param message the message contents to bind
6450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby     */
6550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    public void bind(CellBroadcastMessage message) {
6650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mCbMessage = message;
6750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
6850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        Drawable background = message.isRead() ?
6950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby                getResources().getDrawable(R.drawable.list_item_background_read) :
7050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby                getResources().getDrawable(R.drawable.list_item_background_unread);
7150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
72da5c415f6d0999131e93384b5fb90422ada8e4daJake Hamby        setBackground(background);
7350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
741820c019a79ad2c50e3c3e4bf18155d4d3dc7967Jack Yu        mChannelView.setText(CellBroadcastResources.getDialogTitleResource(mContext, message));
7550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mDateView.setText(message.getDateString(getContext()));
7650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mMessageView.setText(formatMessage(message));
7750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
7850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
7950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    private static CharSequence formatMessage(CellBroadcastMessage message) {
8050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        String body = message.getMessageBody();
8150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
8250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        SpannableStringBuilder buf = new SpannableStringBuilder(body);
8350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
8450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        // Unread messages are shown in bold
8550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        if (!message.isRead()) {
86a93243d13ef0c0b29d871d483642e39c01db7c26Jake Hamby            buf.setSpan(new StyleSpan(Typeface.BOLD), 0, buf.length(),
87a93243d13ef0c0b29d871d483642e39c01db7c26Jake Hamby                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
8850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        }
8950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        return buf;
9050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
9150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby
9250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    @Override
9350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
9450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        // Speak the date first, then channel name, then message body
9550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        event.getText().add(mCbMessage.getSpokenDateString(getContext()));
9650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mChannelView.dispatchPopulateAccessibilityEvent(event);
9750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        mMessageView.dispatchPopulateAccessibilityEvent(event);
9850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby        return true;
9950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby    }
10050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby}
101