146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang/*
246dfba6160b55a582b344328067e3dafeb881dd9Andy Huang * Copyright (C) 2012 Google Inc.
346dfba6160b55a582b344328067e3dafeb881dd9Andy Huang * Licensed to The Android Open Source Project.
446dfba6160b55a582b344328067e3dafeb881dd9Andy Huang *
546dfba6160b55a582b344328067e3dafeb881dd9Andy Huang * Licensed under the Apache License, Version 2.0 (the "License");
646dfba6160b55a582b344328067e3dafeb881dd9Andy Huang * you may not use this file except in compliance with the License.
746dfba6160b55a582b344328067e3dafeb881dd9Andy Huang * You may obtain a copy of the License at
846dfba6160b55a582b344328067e3dafeb881dd9Andy Huang *
946dfba6160b55a582b344328067e3dafeb881dd9Andy Huang *      http://www.apache.org/licenses/LICENSE-2.0
1046dfba6160b55a582b344328067e3dafeb881dd9Andy Huang *
1146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang * Unless required by applicable law or agreed to in writing, software
1246dfba6160b55a582b344328067e3dafeb881dd9Andy Huang * distributed under the License is distributed on an "AS IS" BASIS,
1346dfba6160b55a582b344328067e3dafeb881dd9Andy Huang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1446dfba6160b55a582b344328067e3dafeb881dd9Andy Huang * See the License for the specific language governing permissions and
1546dfba6160b55a582b344328067e3dafeb881dd9Andy Huang * limitations under the License.
1646dfba6160b55a582b344328067e3dafeb881dd9Andy Huang */
1746dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
1846dfba6160b55a582b344328067e3dafeb881dd9Andy Huangpackage com.android.mail.browse;
1946dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
2046dfba6160b55a582b344328067e3dafeb881dd9Andy Huangimport android.content.Context;
21735a22a197215ec4787ad9f3cbaf465cce54f4d0Andrew Sappersteinimport android.content.res.Resources;
2246dfba6160b55a582b344328067e3dafeb881dd9Andy Huangimport android.util.AttributeSet;
2346dfba6160b55a582b344328067e3dafeb881dd9Andy Huangimport android.view.View;
24605dcfcefab6b222db6178f9c64a9d7a1c464da9Andrew Sappersteinimport android.widget.FrameLayout;
2546dfba6160b55a582b344328067e3dafeb881dd9Andy Huangimport android.widget.TextView;
2646dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
2746dfba6160b55a582b344328067e3dafeb881dd9Andy Huangimport com.android.mail.R;
2846dfba6160b55a582b344328067e3dafeb881dd9Andy Huangimport com.android.mail.browse.ConversationViewAdapter.SuperCollapsedBlockItem;
2946dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
30c7d75225488f79ed0020df442cd270e4b85e6865Andrew Sappersteinimport java.text.NumberFormat;
31c7d75225488f79ed0020df442cd270e4b85e6865Andrew Sapperstein
3246dfba6160b55a582b344328067e3dafeb881dd9Andy Huang/**
3346dfba6160b55a582b344328067e3dafeb881dd9Andy Huang * A header block that expands to a list of collapsed message headers. Will notify a listener on tap
3446dfba6160b55a582b344328067e3dafeb881dd9Andy Huang * so the listener can hide the block and reveal the corresponding collapsed message headers.
3546dfba6160b55a582b344328067e3dafeb881dd9Andy Huang *
3646dfba6160b55a582b344328067e3dafeb881dd9Andy Huang */
37605dcfcefab6b222db6178f9c64a9d7a1c464da9Andrew Sappersteinpublic class SuperCollapsedBlock extends FrameLayout implements View.OnClickListener {
3846dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
3946dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    public interface OnClickListener {
4046dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        /**
4146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang         * Handle a click on a super-collapsed block.
4246dfba6160b55a582b344328067e3dafeb881dd9Andy Huang         *
4346dfba6160b55a582b344328067e3dafeb881dd9Andy Huang         */
4446dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        void onSuperCollapsedClick(SuperCollapsedBlockItem item);
4546dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
4646dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
47c7d75225488f79ed0020df442cd270e4b85e6865Andrew Sapperstein    private SuperCollapsedBlockItem mSuperCollapsedItem;
4846dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    private OnClickListener mClick;
49fa13f135741eb4a1aa372cf6066759c94661401fAndrew Sapperstein    private TextView mSuperCollapsedText;
5046dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
5146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    public SuperCollapsedBlock(Context context) {
5246dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        this(context, null);
5346dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
5446dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
5546dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    public SuperCollapsedBlock(Context context, AttributeSet attrs) {
5646dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        super(context, attrs);
5746dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        setActivated(false);
5846dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        setOnClickListener(this);
5946dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
6046dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
6146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    public void initialize(OnClickListener onClick) {
6246dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        mClick = onClick;
6346dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
6446dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
6546dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    @Override
6646dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    protected void onFinishInflate() {
6746dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        super.onFinishInflate();
68fa13f135741eb4a1aa372cf6066759c94661401fAndrew Sapperstein        mSuperCollapsedText = (TextView) findViewById(R.id.super_collapsed_text);
6946dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
7046dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
7146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    public void bind(SuperCollapsedBlockItem item) {
72c7d75225488f79ed0020df442cd270e4b85e6865Andrew Sapperstein        mSuperCollapsedItem = item;
7346dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        setCount(item.getEnd() - item.getStart() + 1);
7446dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
7546dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
7646dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    public void setCount(int count) {
77c7d75225488f79ed0020df442cd270e4b85e6865Andrew Sapperstein        final String strCount = NumberFormat.getIntegerInstance().format(count);
78c7d75225488f79ed0020df442cd270e4b85e6865Andrew Sapperstein        mSuperCollapsedText.setText(strCount);
79735a22a197215ec4787ad9f3cbaf465cce54f4d0Andrew Sapperstein        final Resources res = getResources();
80c7d75225488f79ed0020df442cd270e4b85e6865Andrew Sapperstein        final int colorId = mSuperCollapsedItem.hasDraft() ?
81735a22a197215ec4787ad9f3cbaf465cce54f4d0Andrew Sapperstein                R.color.text_color_draft_red : R.color.conversation_view_text_color_light;
82735a22a197215ec4787ad9f3cbaf465cce54f4d0Andrew Sapperstein        mSuperCollapsedText.setTextColor(res.getColor(colorId));
83605dcfcefab6b222db6178f9c64a9d7a1c464da9Andrew Sapperstein        setContentDescription(
84735a22a197215ec4787ad9f3cbaf465cce54f4d0Andrew Sapperstein                res.getQuantityString(R.plurals.show_messages_read, count, count));
8546dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
8646dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
8746dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    @Override
8846dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    public void onClick(final View v) {
89fa13f135741eb4a1aa372cf6066759c94661401fAndrew Sapperstein        ((TextView) findViewById(R.id.super_collapsed_text)).setText(
9046dfba6160b55a582b344328067e3dafeb881dd9Andy Huang                R.string.loading_conversation);
9146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
9246dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        if (mClick != null) {
9346dfba6160b55a582b344328067e3dafeb881dd9Andy Huang            getHandler().post(new Runnable() {
9446dfba6160b55a582b344328067e3dafeb881dd9Andy Huang                @Override
9546dfba6160b55a582b344328067e3dafeb881dd9Andy Huang                public void run() {
96c7d75225488f79ed0020df442cd270e4b85e6865Andrew Sapperstein                    mClick.onSuperCollapsedClick(mSuperCollapsedItem);
9746dfba6160b55a582b344328067e3dafeb881dd9Andy Huang                }
9846dfba6160b55a582b344328067e3dafeb881dd9Andy Huang            });
9946dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        }
10046dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
10146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang}
102