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