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;
2146dfba6160b55a582b344328067e3dafeb881dd9Andy Huangimport android.util.AttributeSet;
2246dfba6160b55a582b344328067e3dafeb881dd9Andy Huangimport android.view.View;
23fa13f135741eb4a1aa372cf6066759c94661401fAndrew Sappersteinimport android.widget.LinearLayout;
2446dfba6160b55a582b344328067e3dafeb881dd9Andy Huangimport android.widget.TextView;
2546dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
2646dfba6160b55a582b344328067e3dafeb881dd9Andy Huangimport com.android.mail.R;
2746dfba6160b55a582b344328067e3dafeb881dd9Andy Huangimport com.android.mail.browse.ConversationViewAdapter.SuperCollapsedBlockItem;
2846dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
2946dfba6160b55a582b344328067e3dafeb881dd9Andy Huang/**
3046dfba6160b55a582b344328067e3dafeb881dd9Andy Huang * A header block that expands to a list of collapsed message headers. Will notify a listener on tap
3146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang * so the listener can hide the block and reveal the corresponding collapsed message headers.
3246dfba6160b55a582b344328067e3dafeb881dd9Andy Huang *
3346dfba6160b55a582b344328067e3dafeb881dd9Andy Huang */
34fa13f135741eb4a1aa372cf6066759c94661401fAndrew Sappersteinpublic class SuperCollapsedBlock extends LinearLayout implements View.OnClickListener {
3546dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
3646dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    public interface OnClickListener {
3746dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        /**
3846dfba6160b55a582b344328067e3dafeb881dd9Andy Huang         * Handle a click on a super-collapsed block.
3946dfba6160b55a582b344328067e3dafeb881dd9Andy Huang         *
4046dfba6160b55a582b344328067e3dafeb881dd9Andy Huang         */
4146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        void onSuperCollapsedClick(SuperCollapsedBlockItem item);
4246dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
4346dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
4446dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    private SuperCollapsedBlockItem mModel;
4546dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    private OnClickListener mClick;
46fa13f135741eb4a1aa372cf6066759c94661401fAndrew Sapperstein    private TextView mSuperCollapsedText;
4746dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
4846dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    public SuperCollapsedBlock(Context context) {
4946dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        this(context, null);
5046dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
5146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
5246dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    public SuperCollapsedBlock(Context context, AttributeSet attrs) {
5346dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        super(context, attrs);
5446dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        setActivated(false);
5546dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        setOnClickListener(this);
5646dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
5746dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
5846dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    public void initialize(OnClickListener onClick) {
5946dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        mClick = onClick;
6046dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
6146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
6246dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    @Override
6346dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    protected void onFinishInflate() {
6446dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        super.onFinishInflate();
65fa13f135741eb4a1aa372cf6066759c94661401fAndrew Sapperstein        mSuperCollapsedText = (TextView) findViewById(R.id.super_collapsed_text);
6646dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
6746dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
6846dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    public void bind(SuperCollapsedBlockItem item) {
6946dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        mModel = item;
7046dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        setCount(item.getEnd() - item.getStart() + 1);
7146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
7246dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
7346dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    public void setCount(int count) {
74fa13f135741eb4a1aa372cf6066759c94661401fAndrew Sapperstein        mSuperCollapsedText.setText(
75fa13f135741eb4a1aa372cf6066759c94661401fAndrew Sapperstein                getResources().getQuantityString(R.plurals.show_messages_read, count, count));
7646dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
7746dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
7846dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    @Override
7946dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    public void onClick(final View v) {
80fa13f135741eb4a1aa372cf6066759c94661401fAndrew Sapperstein        ((TextView) findViewById(R.id.super_collapsed_text)).setText(
8146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang                R.string.loading_conversation);
8246dfba6160b55a582b344328067e3dafeb881dd9Andy Huang
8346dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        if (mClick != null) {
8446dfba6160b55a582b344328067e3dafeb881dd9Andy Huang            getHandler().post(new Runnable() {
8546dfba6160b55a582b344328067e3dafeb881dd9Andy Huang                @Override
8646dfba6160b55a582b344328067e3dafeb881dd9Andy Huang                public void run() {
8746dfba6160b55a582b344328067e3dafeb881dd9Andy Huang                    mClick.onSuperCollapsedClick(mModel);
8846dfba6160b55a582b344328067e3dafeb881dd9Andy Huang                }
8946dfba6160b55a582b344328067e3dafeb881dd9Andy Huang            });
9046dfba6160b55a582b344328067e3dafeb881dd9Andy Huang        }
9146dfba6160b55a582b344328067e3dafeb881dd9Andy Huang    }
9246dfba6160b55a582b344328067e3dafeb881dd9Andy Huang}
93