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